У меня был бы вопрос, как получить сумму слов, которые, по моему мнению, имеют схожее значение, поэтому я хотел бы считать одно и то же слово.

Например, у меня есть такой набор данных:

    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

К сожалению, я не смог применить более ранний стемминг, так как набор данных, который я получил, выглядит так, как показано выше. Не могли бы вы дать мне совет, как получить эту сумму?

0
user12907213 13 Сен 2020 в 22:42

1 ответ

Лучший ответ

Вы можете использовать nltk (df - это входной фрейм данных, которым вы поделились):

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
2
Grzegorz Skibinski 13 Сен 2020 в 20:03