【问题标题】:How to use Stemmer or Lemmatizer to stem specific word如何使用 Stemmer 或 Lemmatizer 来词干特定的词
【发布时间】:2018-03-04 10:19:57
【问题描述】:

我目前正在尝试阻止一个大型语料库(大约 80 万个句子)。我已经设法阻止了基本的。现在的问题是我只想阻止一个特定的单词,例如这种方法仅适用于引理是原始单词的子字符串的情况。例如,单词 apples 的后缀是 apple 和 's'。但是如果不是子串,就不会像tooth这个词那样把它拆分成tooth。

我还阅读了关于词形还原器 WordNet 的文章,我们可以在其中为 pos 添加一个参数,例如动词、名词或形容词。有没有办法可以应用上面的方法?

提前致谢!

【问题讨论】:

标签: java python nlp stemming lemmatization


【解决方案1】:

这里有一个完整的例子 -

import nltk
from nltk.corpus import wordnet
from difflib import get_close_matches as gcm
from itertools import chain
from nltk.stem.porter import *

texts = [ " apples are good. My teeth will fall out.",
          " roses are red. cars are great to have"]

lmtzr = nltk.WordNetLemmatizer()
stemmer = PorterStemmer()

for text in texts:
    tokens = nltk.word_tokenize(text) # should sent tokenize it first
    token_lemma = [ lmtzr.lemmatize(token) for token in tokens ] # take your pick here between lemmatizer and wordnet synset.
    wn_lemma = [ gcm(word, list(set(list(chain(*[i.lemma_names() for i in wordnet.synsets(word)]))))) for word in tokens ]
    #print(wn_lemma) # works for unconventional words like 'teeth' --> tooth. You might want to take a closer look
    tokens_final = [ stemmer.stem(tokens[i]) if len(tokens[i]) > len(token_lemma[i]) else token_lemma[i] for i in range(len(tokens)) ]
    print(tokens_final)

输出

['appl', 'are', 'good', '.', 'My', 'teeth', 'will', 'fall', 'out', '.']
['rose', 'are', 'red', '.', 'car', 'are', 'great', 'to', 'have']

说明

注意stemmer.stem(tokens[i]) if len(tokens[i]) > len(token_lemma[i]) else token_lemma[i] 这就是魔法发生的地方。如果词形还原词是主词的子集,则该词将被词干化,否则它只会保持词形化。

注意

您正在尝试的词形还原有一些极端情况。 WordnetLemmatizer 不够聪明,无法处理像“牙齿”->“牙齿”这样的特殊情况。在这些情况下,您可能需要查看Wordnet.synset,它可能会派上用场。

我在 cmets 中包含了一个小案例供您调查。

【讨论】:

  • 是否可以使用 WornetLemmatizer 计算句子中的动词数量?
  • 不。您必须先对句子进行 pos 标记,然后搜索标记为动词的单词。 Lemmatizers 与语法标签无关
  • 不是去掉后缀,而是可以分开,例如:apples 变成 apple -s , perform -ed ?
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多