Удалить низкочастотные слова - PullRequest
0 голосов
/ 11 мая 2018

У меня есть датафрейм с 2 столбцами, 1 столбец содержит строку слов, например:

       Col1                 Col2
0       1          how to remove this word
1       5          how to remove the  word

Я бы хотел удалить все слова, которые встречались один раз во всем фрейме данных (порог = 1), например: (лучше, если я могу указать порог)

       Col1                 Col2
0       1          how to remove word
1       5          how to remove word

Есть предложения? Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Метод из get_dummies

s=df.set_index('Col1').Col2.str.get_dummies(sep=' ')


s.loc[:,s.all()].stack().reset_index(level=1).groupby('Col1')['level_1'].apply(' '.join).reset_index(name='Col2')
Out[155]: 
   Col1                Col2
0     1  how remove to word
1     5  how remove to word
0 голосов
/ 11 мая 2018

Давайте попробуем использовать Counter здесь:

  1. Разделить предложения на слова
  2. Вычислить глобальную частоту слова
  3. Фильтр слов на основе вычисленных частот
  4. Присоединиться и переназначить

from collections import Counter
from itertools import chain

# split words into lists
v = df['Col2'].str.split().tolist() # [s.split() for s in df['Col2'].tolist()]
# compute global word frequency
c = Counter(chain.from_iterable(v))
# filter, join, and re-assign
df['Col2'] = [' '.join([j for j in i if c[j] > 1]) for i in v]

df
   Col1                Col2
0     1  how to remove word
1     5  how to remove word
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...