porter-stemmer:python 中的词干提取不起作用

porter-stemmer: Stemming in python is not working

  train_data = ["Consultant, changing,  Waiting"]

我正在尝试使用以下代码将词干分析器应用于数据,但它保留了原始数据:

 stemmer = stem.porter.PorterStemmer()
    
     train_data = train_stemmer
        
    for i in range(len(train_stemmer)):
        train_stemmer[i] = stemmer.stem(train_stemmer[i])

代码运行良好,但没有产生我预期的结果,即:

["Consult, change, Wait"]

有两件事跳出来了:

  1. train_data 在你的问题中是一个包含一个字符串 ["Consult, change, Wait"] 的列表,而不是一个包含三个字符串的列表 ["Consult", "change", "Wait"]
  2. 词干自动转换为小写

如果您希望列表包含一个字符串,这应该可以正常工作:

from nltk.stem import porter

stemmer = porter.PorterStemmer()

# List of one string
string_in_list = ["Consult, change, Wait"]
for word in string_in_list:
    print(stemmer.stem(word))
print("----")

如果您想要一个包含三个字符串的列表,请修改以在逗号之间包含引号:

# List of three strings
individual_words = ["Consult", "change", "Wait"]
for word in individual_words:
    print(stemmer.stem(word))
print("----")

处理单词开头的大写与小写需要传递一个参数,但如果您尝试处理专有名词(例如区分词干 change 和名称 Chang).

# Stem but do not convert first character to lowercase
for word in individual_words:
    print(stemmer.stem(word, to_lowercase=False))

全部三个时的预期输出 运行:

consult, change, wait
----
consult
chang
wait
----
Consult
chang
Wait