【问题标题】:Finding the original form of a word after stemming词干提取后查找单词的原始形式
【发布时间】:2021-12-21 18:04:35
【问题描述】:

我正在提取一个单词列表并从中制作一个数据框。原始数据如下:

original = 'The man who flies the airplane dies in an air crash. His wife died a couple of weeks ago.'
df = pd.DataFrame({'text':[original]})

我用于词形还原和词干提取的函数是:

# lemmatize & stemmed.
def lemmatize_stemming(text):
    return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos='v'))

def preprocess(text):
    result = []
    for token in gensim.utils.simple_preprocess(text):
        if token not in gensim.parsing.preprocessing.STOPWORDS:
            result.append(lemmatize_stemming(token))
    return result

输出将来自运行 df['text'].map(preprocess)[0] 我得到的结果:

['man',
 'fli',
 'airplan',
 'die',
 'air',
 'crash',
 'wife',
 'die',
 'coupl',
 'week',
 'ago']

我想知道如何将输出返回到原始令牌?例如,我有 die,它来自 dead and dies。

【问题讨论】:

标签: python nlp nltk gensim stemming


【解决方案1】:

您可以将映射关系作为结果返回并稍后执行后处理。

def preprocess(text):
    lemma_mapping = []
    for token in gensim.utils.simple_preprocess(text):
        if token not in gensim.parsing.preprocessing.STOPWORDS:
            lemma_mapping[token] = lemmatize_stemming(token)
    return lemma_mapping

或将其作为副产品存储。

from collections import defaultdict

lemma_mapping = defaultdict(str)
def preprocess(text):
    result = []
    for token in gensim.utils.simple_preprocess(text):
        if token not in gensim.parsing.preprocessing.STOPWORDS:
            lemma = lemmatize_stemming(token)
            result.append(lemma)
            lemma_mapping[token] = lemma
    return result

【讨论】:

    【解决方案2】:

    词干通过不可逆地将多个标记转换为一些共享的“词干”形式来破坏原始语料库中的信息。

    我要原文,你自己保留。

    另外,请注意:许多处理大量数据的算法,例如理想条件下的 word2vec,不一定需要或什至受益于词干提取。您希望为原始文本中的所有单词(不仅仅是词干)提供向量,并且有了足够的数据,单词的相关形式将获得相似的向量。 (实际上,它们甚至会在有用的方面有所不同,所有“过去”或“状语”或任何变体都具有相似的方向偏差。)

    因此,只有在您确定它有助于您的目标,且不超过您的语料库限制和目标时才这样做。

    【讨论】:

    • 感谢您的澄清,所以我目前的项目是关于主题建模的,我正在使用 LDA 算法。想知道您是否对词干有任何建议,它对 LDA 有用吗?
    • 没有办法事先确定——这取决于您的数据质量、数量和最终用途。最好的方法是两种方法都尝试,看看哪种方法更好 - 在某些特定于项目的、可重复的、可靠的评估中,这些评估与您的实际需求相近。
    猜你喜欢
    • 2010-10-20
    • 2014-11-02
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2021-12-27
    • 2021-10-09
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多