我有一个包含单词和词性标签的 txt 文件:
皮埃尔/NNP
文肯/NNP
,/,
61张/CD
年/NNS
老/JJ
,/,
将/MD
加入/VB
/DT
板/NN
作为/IN
a/DT
非执行/JJ
导演/NN
十一月/NNP
29张/CD
./.
...
我的任务是生成一个具有以下输出的文件:
莫蒂默 1 NNP 1
犯规1 JJ 1
报告 16 VBN 7 VBD 9
26 RB 6 IN 20 之前
允许 4 VB 2 VBP 2
第一列是单词,第二列是该单词在整个文档中出现的次数,然后是使用哪个词性标签标记的频率。
获取总字数不是问题:
with open(input_filename, "r") as f:
for line in f:
try:
word, pos = line.rsplit('/', 1)
wordcounts[word] = wordcounts.get(word, 0) + 1
except ValueError:
pass
ValueError 异常对于避免输入文档中出现空行是必要的。但是,我无法找到合适的数据结构来存储 POS 标签计数,以便将其写入输出文件。你会怎么做?
您的
wordcounts
可以是 defaultdict
中的 Counter
:
from collections import defaultdict, Counter
wordcounts = defaultdict(Counter)
with open(input_filename, "r") as f:
for line in f:
try:
word, pos = line.strip().rsplit('/', 1)
wordcounts[word][pos] += 1
except ValueError:
pass
for word, counts in wordcounts.items():
print(word, counts.total(), ' '.join(f'{pos} {count}' for pos, count in counts.items()))