首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NLP获取单词最常见的词性标签,并将其用于字典中的训练数据

NLP获取单词最常见的词性标签,并将其用于字典中的训练数据
EN

Stack Overflow用户
提问于 2018-10-15 08:16:05
回答 1查看 724关注 0票数 0

我有一个训练文本文件,格式如下(pos,word,tag):

1个I PRP

2 'd MD

3如VB

4到4到

5 go VB

6.。

1个I PRP

我正在尝试建立一个字典,以便当我输入以下格式(pos,word)的新语料库时:

1谁

2个人知道

3什么

4会

5发生

6.

我将能够从我用训练数据构建的字典中对它们进行标记。

我使用的方法是默认字典中的一个计数器,用于查找单词的最常见标记。从我的计数器中,我得到了如下打印结果:

I PRP 7905

1262

如VB 2706

如VBP 201

如UH 95

如IN 112

转至4822

至IN 922

因此,对于单词"like",计数最高的标签是“VB”,为2706。我想让我的字典获取具有最高计数的标签,并将其附加到我的单词中,以便如果我将测试数据集仅包含(pos,word),它将返回该标签。到目前为止,我的代码如下:

代码语言:javascript
复制
file=open("/Users/Desktop/training.txt").read().split('\n')

from collections import Counter, defaultdict
word_tag_counts = defaultdict(Counter)
for row in file:         
    if not row.strip():
        continue          
    pos, word, tag = row.split()
    word_tag_counts[word.lower()][tag] += 1

stats = word_tag_counts
max(stats, key=stats.get)

with open('/Users/Desktop/training.txt','r') as file:
    for line in file.readlines():
        column = line.split('\t') 
with open('/Users/Desktop/output.txt','w') as file: 
    for tag, num in d.items(): 
        file.write("\t".join([column[0], column[1], tag])+"\n")

我收到错误:在'Counter‘和'Counter’的实例之间不支持TypeError:'>‘

我的输出目标与原始训练文件的格式相同(pos从原始txt文件中提取,word从原始txt文件中提取,标签从我的字典中提取):

不确定我能做什么,我也试着使用lambda,但它不起作用。任何事都会有帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 09:27:12

如果我理解正确的话,您现在想要实现的是让一个dict将每个单词的小写形式映射到其最频繁的POS。在stats中,您可以知道每个单词的每个词性标签在存储在Counter中的训练数据中出现的次数。

max(stats, key=stats.get)这一行是你做错了的地方。stats.get(word)返回与word word相关的Counter,而Counters在Python3中是不可比较的(然而,它们在Python2中是可比较的,但这并不真正有意义)。更重要的是,即使Counter是可比较的,max函数也只返回具有最大Counter的单词,这并不是您想要的结果。

我们需要做的是使用POS的most_common()方法,对于每个单词wordget()它的Counter (让我们把它命名为c),并调用c.most_common(1)[0][0]来获得它最频繁的POS。我们需要下标[0][0]的原因是,most_common(k)返回一个top-k频繁项的列表,并且对于每个这样的项,它返回一个包含该项本身及其频率的元组。因此,代码将如下所示:

代码语言:javascript
复制
pos_tags = {word: stats[word].most_common(1)[0][0] for word in stats}

pos_tags就是您想要的映射。您所需要做的就是完成代码的其余部分(将此POS标记方法应用于其他文件)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52808220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档