如何让木槌从没有标签的行中加载所有令牌?

How to get mallet to load all tokens from a line without a label?

我正在尝试对位于以空格分隔的文件中没有标签的数据集执行主题建模。我无法让木槌加载所有令牌。我在 linux 和 mac.

上使用 2.0.8 版

作为对这个问题的测试,我创建了一个包含一行的文件:

1 2 3 4 5

然后运行

mallet import-file --token-regex [0-9]+ --keep-sequence true --label 0 --input testData --output testLoaded mallet 火车主题 --input testLoaded

我应该得到 4 个代币,但我只得到 3 个:

数据已加载。 最大代币:3 代币总数:3

如果我尝试使用 --data 标志,情况会变得更糟(无论我单独使用它和 --label 0 还是 --data 2,结果都一样):

mallet import-file --token-regex [0-9]+ --keep-sequence true --label 0 --data 2 --input testData --output testLoaded2 mallet 火车主题 --input testLoaded2

数据已加载。 最大代币:1 代币总数:1

所以要么我丢失了第一个标记,要么我只得到了第一个标记(2 稍后出现在输出中,所以我知道在后一种情况下它不会将行的其余部分作为单个标记加载) .

Mallet 分两个阶段解析行:首先,它使用 --line-regex 选项将行分割成字段。然后它将这些段映射到三个实例字段(名称、标签、数据)之一。

该命令不起作用,因为它只更改了第二部分,即从正则表达式组到实例字段的映射。它告诉 Mallet 将前两个字段分开,然后忽略它们。这是默认行为的示例:

$ bin/mallet import-file --input token_test.txt --keep-sequence \
--token-regex [0-9]+ --print-output 
name: 1
target: 2
input: 0: 3 (0)
1: 4 (1)
2: 5 (2)

如果我们添加 --label 0 它只是忽略第二个字段,但仍然捕获它:

$ bin/mallet import-file --input token_test.txt --keep-sequence \
--token-regex [0-9]+ --label 0 --print-output 
name: 1
target: <null>
input: 0: 3 (0)
1: 4 (1)
2: 5 (2)

现在,如果我们重新定义行正则表达式,我们可以将整行作为单个字段获取,因为将其全部用作数据:

$ bin/mallet import-file --input token_test.txt --keep-sequence \
--token-regex [0-9]+ --line-regex '(.*)' --data 1 --name 0 --label 0 --print-output 
name: csvline:1
target: <null>
input: 0: 1 (0)
1: 2 (1)
2: 3 (2)
3: 4 (3)
4: 5 (4)