gpt4 book ai didi

python - 如何修改 Wordnet Lemmatizer 以对特定单词进行词形还原?

转载 作者:行者123 更新时间:2023-12-01 00:38:43 24 4
gpt4 key购买 nike

我正在将 wordNet 词形还原器应用到我的语料库中,并且我需要为词形还原器定义词性标注器:

stemmer = PorterStemmer()
def lemmitize(document):
return stemmer.stem(WordNetLemmatizer().lemmatize(document, pos='v'))

def preprocess(document):
output = []
for token in gensim.utils.simple_preprocess(document):
if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3:
print("lemmitize: ", lemmitize(token))
output.append(lemmitize(token))
return output

现在,如您所见,我正在为动词定义 pos(并且我知道 wordNet 默认 pos 是名词),但是当我对文档进行词形还原时:

the left door closed at the night  

我出去的是:

output:  ['leav', 'door', 'close', 'night']

这不是我所期待的。在我上面的句子中,left 指向哪扇门(例如右或左)。如果我选择 pos ='n' 这个问题可能会解决,但它将充当 WearNet 默认值,并且不会对 taken 等单词产生影响。

我在here中发现了类似的问题我修改了 nltk_data/corpora/wordnet/verb.exc 中的异常(exception)列表,并将 left left 更改为 left left 但仍然,我获得与 leave 相同的结果。
现在我想知道这个问题是否有任何解决方案,或者在最好的情况下,有没有什么方法可以添加一些单词的自定义词典(仅限于我的文档),而 wordNet 不会对它们进行词形还原,例如:

my_dict_list = [left, ...]

最佳答案

您在词形还原和词干提取之间犯了一个常见错误。

词干

词干提取意味着将单词缩减为其前缀。它与语法无关,而是与您自己的数据或使用的算法有关。

例如,最常用的词干分析器 Porter Stemmer 会删除“单词的形态和屈折词尾”( Porter Stemmer Website )

因此,像“cook”、“cooking”、“cooked”和“cookie”这样的词的形态/屈折词尾被删除,全部以“Cook”结尾。但是,请注意,您将一个名词、一个现在进行时的动词、一个过去时态的动词和另一个名词捆绑在一起(例如,请注意, cookies ,即使是熟食,实际上并不与“ cooking ”或“ cooking ”一词共享“层次结构”)。

当你这样做时:

stemmer.stem(WordNetLemmatizer().lemmatize(document))

您正在使用 wordnet 进行词干提取 - 首先对单词进行词形还原,然后对其进行词干提取,删除“形态/屈折变化”单词。事实上,如果您进行词干提取,甚至不需要词形还原(它只会改变不规则动词的内容)。

词形还原

另一方面,词形还原使用词汇信息将单词简化为其“默认”、非弯曲形式。为了使其发挥作用,赋予 te POS 非常重要(因为,正如您所见,leaves 是一个词法,既代表动词又代表名词)。

但是如何找到词性呢?

如今有一些技术,但最常用的技术是基于查找表和周围的单词 - 这些技术被输入到预先训练的机器学习算法中,该算法返回最可能的标签。了解更多信息: https://medium.com/greyatom/learning-pos-tagging-chunking-in-nlp-85f7f811a8cb

使用流行的 Python NLP 包 NLTK,您可以执行以下操作:(您必须先下载相关软件包)

import nltk

sentence = "I want to tag these!"
token = nltk.word_tokenize(sentence)
nltk.pos_tag(token)

结果:

[('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('tag', 'VB'), ('these', 'DT'), ('!', '.')]

另一个流行的工具是 Spacy,其功能如下:(您必须先下载经过机器学习训练的模型的语言模型)

import spacy

import spacy
nlp = spacy.load('en')
doc = nlp('I want to tag these!')
print([(token.text, token.pos_) for token in doc])

结果:

[('I', 'PRON'), ('want', 'VERB'), ('to', 'PART'), ('tag', 'VERB'), ('these', 'DET'), ('!', 'PUNCT')]

您可以在此处阅读有关 Spacy POS 标记的更多信息:https://spacy.io/usage/linguistic-features/

然后,我建议您坚持词形还原,因为这将为您提供更细粒度的选项。

关于python - 如何修改 Wordnet Lemmatizer 以对特定单词进行词形还原?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57539043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com