Python 中的土耳其语单词列表使用 snowballstemmer 时出现问题

Problems using snowballstemmer for a list of Turkish words in Python

我正在尝试使用 Python 中名为 snowballstemmer 的库,但它似乎没有按预期工作。可能是什么原因?请在下面查看我的代码。

我的数据集:

df=[['musteri', 'hizmetlerine', 'cabuk', 'baglaniyorum'],['konuda', 'yardımcı', 'oluyorlar', 
   'islemlerimde']]

我已经应用了 snowballstemmer 包并导入了 TurkishStemmer

  from snowballstemmer import TurkishStemmer
  turkStem=TurkishStemmer()
  data_words_nostops=[turkStem.stemWord(word) for word in df]
  data_words_nostops

  [['musteri', 'hizmetlerine', 'cabuk', 'baglaniyorum'],
   ['konuda', 'yardımcı', 'oluyorlar', 'islemlerimde']]

不幸的是,它没有用。但是当我将它应用于单个单词时,它按预期工作:

 turkStem.stemWord("islemlerimde")
 'islem'

可能是什么问题?任何帮助将不胜感激。

谢谢。

您是要一个字符串列表而不是包含字符串的列表列表吗?

当我以这种方式重新格式化您的代码时,我能够获得每个单词的词干:

from snowballstemmer import TurkishStemmer

df = [
    'musteri',
    'hizmetlerine',
    'cabuk',
    'baglaniyorum',
    'konuda',
    'yardımcı',
    'oluyorlar',
    'islemlerimde'
]
turkStem = TurkishStemmer()
data_words_nostops = [turkStem.stemWord(word) for word in df]
print(data_words_nostops)

如果你有一个字符串列表列表(假设它是你定义为 df 的内容)并且你想将它扁平化为一个单词列表,你可以这样做:

df = [
    ['musteri', 'hizmetlerine', 'cabuk', 'baglaniyorum'],
    ['konuda', 'yardımcı', 'oluyorlar', 'islemlerimde']
]
flattened_df = [item for sublist in df for item in sublist]

# Output:
# ['musteri', 'hizmetlerine', 'cabuk', 'baglaniyorum', 'konuda', 'yardımcı', 'oluyorlar', 'islemlerimde']

以上内容归功于 this Whosebug post。

或者,您可以只更正循环以解决原始布局的问题:

df = [
    ['musteri', 'hizmetlerine', 'cabuk', 'baglaniyorum'],
    ['konuda', 'yardımcı', 'oluyorlar', 'islemlerimde']
]
turkStem = TurkishStemmer()
all_stem_lists = []

for word_group in df:
    output_stems = []
    for word in word_group:
        stem = turkStem.stemWord(word)
        output_stems.append(stem)
    all_stem_lists.append(output_stems)

print(all_stem_lists)