Python NLTK:搜索单词

时间:2018-03-01 20:34:21

标签: python nltk corpus stemming lemmatization

我使用棕色语料库“brown.words()”,它给出了1161192个单词的列表。

现在我想找到任何出现的“have”这个词,所以每当在语料库中都有“has”,“have”,“have not”等。我想做点什么(可能是把它们推到一个数组中,可能是一个计数器,也可能是别的。

修改:请注意,此问题与找到匹配的字有关。如果我搜索“有”,我想要一种方法将其匹配为“没有”或“有”,因此.count()无法解决此问题,因为它无法帮助匹配任何内容

我将使用示例代码,以防词干/词形还原工作:

def findWordFamily(findWord):
    wordFamily = []

    lmtzr = WordNetLemmatizer()

    findWord = lmtzr.lemmatize(findWord)
    for word in brown.words():
        lemma = lmtzr.lemmatize(word)
        if lemma == findWord:
            wordFamily.append(word)

    return wordFamily
print(findWordFamily("have"))
# ["have", "have", "had", "having","haven't", "having"]

但问题在于:

for word in brown.words():
    lemma = lmtzr.lemmatize(word)
    # if word is "having" lemma also is "having" instead of "have"

1 个答案:

答案 0 :(得分:0)

在尝试匹配单词之前,您可能需要进行一些预处理。所以“有”或“没有”最终“转变”为“有”。

我建议你看一下词干或词形化:

NLTK的Wordnet Lemmatizer(我的最爱之一):http://www.nltk.org/_modules/nltk/stem/wordnet.html

NLTK的词干:http://www.nltk.org/howto/stem.html

注意:为了使变形词能够与动词一起使用,你必须指明它们实际上是动词。

nltk.stem.WordNetLemmatizer().lemmatize('having', 'v')

希望这有帮助!