用python创建一个代码,从lis中获取最频繁的标记和值对

2024-10-05 10:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.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应该表示制表符,有没有办法也删除它?你们真的帮了大忙


Tags: 文件代码in标记txt示例nn单词
2条回答

如果您不介意使用pandas,这是一个很好的表格数据库,我会做以下事情:

import pandas as pd
df = pd.read_csv("/Users/Desktop/Folder1/trained.txt", sep=" ", header=None, names=["position", "word", "tag"])
df["word_tag_counts"] = df.groupby(["word", "tag"]).transform("count")

如果您只想从每组中获得最大值,您可以:

^{pr2}$

它会给你一个包含你想要的值的表

每个单词需要有一个单独的collections.Counter。此代码使用defaultdict创建计数器字典,而不检查每个单词是否已知。在

from collections import Counter, defaultdict

counts = defaultdict(Counter)
for row in file:           # read one line into `row`
    if not row.strip():
        continue           # ignore empty lines
    pos, word, tag = row.split()
    counts[word.lower()][tag] += 1

就这样,你现在可以检查任何单词中最常见的标记:

^{pr2}$

相关问题 更多 >

    热门问题