Próbowałem przeprowadzić analizę sentymentów na podstawie danych filmowych, a ja utknąłem w punkcie, w którym nie mogę usunąć angielskich Stopords z danych. Co ja robię źle?

from nltk.corpus import stopwords
stop = stopwords.words("English")
list_ = []
for file_ in dataset:
    dataset['Content'] = dataset['Content'].apply(lambda x: [item for item in x.split(',') if item not in stop])
    list_.append(dataset)
dataset = pd.concat(list_, ignore_index=True)
1
ykombinator 26 czerwiec 2017, 03:58

4 odpowiedzi

Najlepsza odpowiedź

Myślę, że kod powinien działać z informacjami. Założenie, które robię, jest z danymi ma dodatkowe miejsce podczas oddzielonego przecinkiem. Poniżej znajduje się test: ( mam nadzieję, że pomaga! )

import pandas as pd
from nltk.corpus import stopwords
import nltk

stop = nltk.corpus.stopwords.words('english')

dataset = pd.DataFrame([{'Content':'i, am, the, computer, machine'}])
dataset = dataset.append({'Content':'i, play, game'}, ignore_index=True)
print(dataset)
list_ = []
for file_ in dataset:
    dataset['Content'] = dataset['Content'].apply(lambda x: [item.strip() for item in x.split(',') if item.strip() not in stop])
    list_.append(dataset)
dataset = pd.concat(list_, ignore_index=True)

print(dataset)

Wejście z STOPWORDS:

                          Content
0   i, am, the, computer, machine
1                   i, play, game

Wynik:

                Content
 0  [computer, machine]
 1         [play, game]
0
student 26 czerwiec 2017, 04:53

Zapętlasz się nad zestawem zestawu danych, ale włączając całą ramę za każdym razem, a nie używasz pliku_

from nltk.corpus import stopwords
stop = stopwords.words("English")
dataset['Cleaned'] = dataset['Content'].apply(lambda x: ','.join([item for item in x.split(',') if item not in stop]))

Który zwraca serię zawierających listę słów, jeśli chcesz spłaszczyć do jednej listy:

flat_list = [item for sublist in list(dataset['Cleaned'].values) for item in sublist]

Z kapeluszowym wskazówką do Wykonywanie listy płaskiej listy list w Pythonie

0
tvashtar 26 czerwiec 2017, 11:22

Spróbuj earthy:

>>> from earthy.wordlist import punctuations, stopwords
>>> from earthy.preprocessing import remove_stopwords
>>> result = dataset['Content'].apply(remove_stopwords)

Zobacz https://github.com /alvations/arthy/blob/master/faq.md#What-else-cante- cdo.

0
alvas 26 czerwiec 2017, 04:00

Cóż, przez komentarz myślę, że nie musisz pętli nad dataset. (Może dataset zawiera tylko pojedynczą kolumnę o nazwie Content)

Możesz po prostu zrobić:

 dataset["Content"] = dataset["Content"].str.split(",").apply(lambda x: [item for item in x if item not in stop])
0
26 czerwiec 2017, 03:26