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

时间:2017-10-03 18:16:13

标签: mallet

我尝试对没有标签的空白分隔文件中的数据集执行主题建模。我无法获取加载所有令牌的槌。我在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 train-topics --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 train-topics --input testLoaded2

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

所以要么我丢失了第一个令牌,要么我只获得了第一个令牌(后来输出中出现了2个令牌,所以我知道它并没有将后续行加载为后者中的单个令牌情况)。

1 个答案:

答案 0 :(得分:1)

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)