带词干的词频

Word frequency with stemming

我有一个问题,如何计算我认为具有相似含义的单词的总和,所以我想算作同一个单词。

例如,我有这个数据集:

    Word    Frequency
0   game    52055
1   laura   24953
2   luke    21133
3   story   20739
4   dog     17054
5   like    12792
7   character   8845
9   play    8420
11  characters  8081
12  people  7933
16  good    6496
18  10      6309
19  gameplay6195
22  revenge 5922
25  bad     5331
26  end     5027
27  feel    4833
28  killed  4779
31  kill    4545
33  graphics4372
34  time    4272
35  cat     4244
44  great   3466
45  ending  3379
...
50  love    3059
51  never   2965
52  new     2963
53  killing 2955

这是一个包含两列的数据集:一列包含单词,另一列包含它们在文档中出现的频率。 我需要将以下内容视为相同的词:

我认为这应该可以通过使用 portstemmer 轻松完成。但是,我还需要将它们的频率计算为总和。

所以,例如,

28  killed  4779
31  kill    4545
53  killing 2955

应该是

31 kill 12279

不幸的是,我无法应用较早的词干提取,因为我收到的数据集如上所示。 你能给我一些关于如何获得这笔款项的建议吗?

您可以使用 nltkdf 是您共享的输入数据框):

from nltk.stem import PorterStemmer 
from nltk.tokenize import word_tokenize 

ps = PorterStemmer() 
df["Stem"] = df["Word"].apply(ps.stem)
res = df.groupby("Stem")["Frequency"].sum()

输出(对于您分享的作品):

Stem
10           6309
bad          5331
cat          4244
charact     16926
dog         17054
end          8406
feel         4833
game        52055
gameplay     6195
good         6496
graphic      4372
great        3466
kill        12279
laura       24953
like        12792
love         3059
luke        21133
never        2965
new          2963
peopl        7933
play         8420
reveng       5922
stori       20739
time         4272
Name: Frequency, dtype: int64