【问题标题】:Maintain proper nouns and capitalised words while stemming在词干提取时保持专有名词和大写单词
【发布时间】:2019-09-13 12:41:06
【问题描述】:

我正在设计一个文本处理程序,需要对单词进行词干分析,以便以后进行探索性分析。我的流程之一是词干,我必须使用 Porter Stemmer。

我设计了一个 DataFrame 结构来存储我的数据。此外,我还设计了一个应用于 DataFrame 的函数。当我将该函数应用于 DataFrame 时,词干可以工作,但它不会保留大写(或专有名词)单词。

我的代码的 sn-p:

from nltk.stem.porter import PorterStemmer

def stemming(word):
    stemmer = PorterStemmer()
    word = str(word)
    if word.title():
        stemmer.stem(word).capitalize()
    elif word.isupper():
        stemmer.stem(word).upper()
    else:
        stemmer.stem(word)
    return word

dfBody['body'] = dfBody['body'].apply(lambda x: [stemming(y) for y in x])

这是我没有大写单词的结果: output

数据集样本(我的数据集很大):

file    body
PP3169 ['performing', 'Maker', 'USA', 'computer', 'Conference', 'NIPS']

预期输出(应用词干函数后):

file    body
PP3169 ['perform', 'Make', 'USA', 'comput', 'Confer', 'NIPS']

任何建议将不胜感激!

【问题讨论】:

  • 您能否分享数据框中的几行作为一个小示例/测试数据,以便我们对其进行测试?谢谢。
  • 不应该和word = 一起使用——即。 word = stemmer.stem(word).capitalize()
  • @furas 将每个单词的第一个字母变为大写 :S
  • 你能举一个你期望的输入和相应输出的例子吗,当你说大写(或专有名词)时,这可能是两种不同的情况
  • word.title() 将文本转换为标题。您必须比较if word == word.title():,或查看if word[0].isupper() and word[1:].islower()

标签: python nlp porter-stemmer


【解决方案1】:

首先:您应该将结果分配给word

word = stemmer.stem(word).capitalize()

第二:word.title() 不检查单词是否大写,但它会创建大写单词,因此您应该检查

if word == word.title():

最终

if word[0].isupper() and word[1:].islower():

def stemming(word):
    stemmer = PorterStemmer()
    word = str(word)
    if word == word.title():
        word = stemmer.stem(word).capitalize()
    elif word.isupper():
        word = stemmer.stem(word).upper()
    else:
        word = stemmer.stem(word)
    return word

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2018-05-23
    • 2013-06-09
    相关资源
    最近更新 更多