我有一个.txt文件,有3列:单词位置、单词和标记(NN、VB、JJ等)。在
txt文件示例:
1 i PRP
2 want VBP
3 to TO
4 go VB
我想在列表中找到单词和标记成对出现的频率,以便找到最常分配给单词的标记。 结果示例: 3(食物,NN),2(勇敢,形容词)
我的想法是从打开文件夹中的文件开始,逐行阅读并拆分文件,使用字典设置计数器并以最常见到不常见的降序打印。在
我的代码非常粗糙(我几乎不好意思发布它):
^{pr2}$显然,我没有结果。任何事都会有帮助的。谢谢。在
更新:
所以我把这段代码贴在这里,它很有效,但我的结果有点奇怪。下面是代码(作者删除了它,所以我不知道该归功于谁):
file=open("/Users/Desktop/Folder1/trained.txt").read().split('\n')
d = {}
for i in file:
if i[1:] in d.keys():
d[i[1:]] += 1
else:
d[i[1:]] = 1
print (sorted(d.items(), key=lambda x: x[1], reverse=True))
以下是我的结果:
[('', 15866), ('\t.\t.', 9479), ('\ti\tPRP', 7234), ('\tto\tTO', 4329), ('\tlike\tVB', 2533), ('\tabout\tIN', 2518), ('\tthe\tDT', 2389), ('\tfood\tNN', 2092), ('\ta\tDT', 2053), ('\tme\tPRP', 1870), ('\twant\tVBP', 1713), ('\twould\tMD', 1507), ('0\t.\t.', 1427), ('\teat\tVB', 1390), ('\trestaurant\tNN', 1371), ('\tuh\tUH', 1356), ('1\t.\t.', 1265), ('\ton\tIN', 1237), ("\t'd\tMD", 1221), ('\tyou\tPRP', 1145), ('\thave\tVB', 1127), ('\tis\tVBZ', 1098), ('\ttell\tVB', 1030), ('\tfor\tIN', 987), ('\tdollars\tNNS', 959), ('\tdo\tVBP', 956), ('\tgo\tVB', 931), ('2\t.\t.', 912), ('\trestaurants\tNNS', 899),
似乎有一个好的结果与文字和其他结果与空格或随机数的混合,有谁知道一种方法删除什么不是真正的单词?另外,我知道\t应该表示制表符,有没有办法也删除它?你们真的帮了大忙
如果您不介意使用pandas,这是一个很好的表格数据库,我会做以下事情:
如果您只想从每组中获得最大值,您可以:
^{pr2}$它会给你一个包含你想要的值的表
每个单词需要有一个单独的
collections.Counter
。此代码使用defaultdict
创建计数器字典,而不检查每个单词是否已知。在就这样,你现在可以检查任何单词中最常见的标记:
^{pr2}$相关问题 更多 >
编程相关推荐