如何让mallet在没有标签的情况下加载一行中的所有令牌?

如何让mallet在没有标签的情况下加载一行中的所有令牌?,mallet,Mallet,我正在尝试对一个数据集执行主题建模,该数据集位于一个以空格分隔的文件中,没有标签。我不能让马勒把所有的代币都装进去。我在linux和mac上使用的是2.0.8版 作为对该问题的测试,我创建了一个文件,其中有一行: 123445 然后跑 mallet导入文件-令牌regex[0-9]+-保持序列为真-标签0-输入测试数据-输出测试加载 木槌训练主题-输入测试加载 我应该得到4个代币,但我只得到3个: 数据已加载。 最大代币:3 代币总数:3 如果我尝试使用-data标志(无论是单独使用-label

我正在尝试对一个数据集执行主题建模,该数据集位于一个以空格分隔的文件中,没有标签。我不能让马勒把所有的代币都装进去。我在linux和mac上使用的是2.0.8版

作为对该问题的测试,我创建了一个文件,其中有一行:

123445

然后跑

mallet导入文件-令牌regex[0-9]+-保持序列为真-标签0-输入测试数据-输出测试加载 木槌训练主题-输入测试加载

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

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

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

mallet导入文件-令牌regex[0-9]+-保持序列为真-标签0-数据2-输入测试数据-输出测试加载2 木槌训练主题-输入测试加载2

数据已加载。 最大令牌数: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)
现在,如果我们重新定义行regex,我们可以将整行作为单个字段抓取,并将其全部用作数据:

$ 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)