2015-09-05 104 views
0

给定一个单词如“table”,我想确定它最常用的名称,它最常用的用法是名词,动词还是形容词。我想在python中做到这一点。除了wordnet以外还有其他的东西吗?我不喜欢wordnet。或者,如果我使用wordnet,我将如何完全使用它?将单词识别为名词,动词或形容词

+0

您需要词性标记(http://www.nltk.org/book/ch05.html)。 – Vidul

+0

Wordnet对于一个词的每个* sense *有一个频率(例如'table')。但是自2003年以来这一点并没有得到更新(据我所知)。更好的选择是下载Google n-grams并在该数据集上进行POS标记。 –

+0

你打算如何使用POS标签5字ngrams?这个想法是没有开始的。但谷歌确实提供了由第一个词的POS分类的[ngram文件](http://storage.googleapis.com/books/ngrams/books/datasetsv2.html),所以这将是一种广泛计数的方法。如果你有磁盘空间,并真的需要通过这么多的数据。 – alexis

回答

5
import nltk 


text = 'This is a table. We should table this offer. The table is in the center.' 
text = nltk.word_tokenize(text) 
result = nltk.pos_tag(text) 
result = [i for i in result if i[0].lower() == 'table'] 

print(result) # [('table', 'JJ'), ('table', 'VB'), ('table', 'NN')] 
+0

如果单词不在上下文中,该怎么办?只是“表”这个词,它的最常用的用法,不管它的名词,动词等等。 –

+2

你是什么意思的“背景”?这是使这个定义(词性的一部分)成为可能的上下文。 – Vidul

+0

任何名词都可以是verbed。 – stark

4

如果你有一个词断章取义,想知道它最常见的用途,你可以看看别人的频率表(例如共发现),或者你可以做自己的罪状:只要找到一个标签足够大的语料库用于您的目的,并计算其实例。如果你想使用免费的语料库,NLTK包括布朗语料库(100万字)。 NLTK还提供了处理较大的非自由语料库(例如英国国家语料库)的方法。

import nltk 
from nltk.corpus import brown 
table = nltk.FreqDist(t for w, t in brown.tagged_words() if w.lower() == 'table') 
print(table.most_common()) 

[('NN', 147), ('NN-TL', 50), ('VB', 1)] 
相关问题