我想创建一个多级字典,这是令牌与Pos标签一起出现的次数。
示例:
cat/nt
cat = token. nt = pos tag
我已经到了这里,但我被困住了。
import re
dicts = {}
wds = re.compile('(\w*|\w+\.\w*)([/])(\w+)')
with open('train.txt', 'r') as td:
for lines in td:
m = wds.finditer(lines)
for mms in m:
dicts[mms.group(1)] = mms.group(3)
train.txt文件的内容
Pierre/NNP Vinken/NNP ,/, 61/CD years/NNS old/JJ ,/, will/MD join/VB
答案 0 :(得分:1)
在你的内部for循环中尝试这样的事情:
for mms in m:
token = mms.group(1)
pos = mms.group(3)
if token in dicts:
if pos in dicts[token]:
dicts[token][pos] += 1
else:
dicts[token][pos] = 1
else:
dicts[token] = {pos: 1}
这检查我们之前是否已经看过该令牌,并且考虑到我们已经检查过该令牌,检查我们之前是否已将其视为此词性。如果我们之前看过这个组合,请增加计数。如果我们已经看到了令牌,但没有看到此POS,则将其默认为1.如果我们之前从未见过令牌,请为其添加一个条目,其中包含此POS的子码数为1.
你可以使用默认的dict获得相同的效果,但我认为看到它在幕后的工作方式会更清晰。
编辑: 要打印生成的字典,请尝试
for token in dicts.keys():
for pos in dicts[token].keys():
print "%s %s: %s" % (token, pos, dicts[token][pos])