Как узнать, есть ли стоп-слова, и посчитать, если они существуют? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть CSV-файл, который содержит список предложений в строках, я хотел выяснить, есть ли какие-либо стоп-слова в каждой строке, вернуть 1, если существует, иначе вернуть 0. И если вернуть 1, я хочу подсчитать стоп-слова. Ниже приведены мои коды, я смог получить только все стоп-слова, которые существуют в CSV, но не для каждой строки.

import pandas as pd
import csv
import nltk
from nltk.tag import pos_tag
from nltk import sent_tokenize,word_tokenize
from collections import Counter
from nltk.corpus import stopwords
nltk.download('stopwords')

top_N = 10

news=pd.read_csv("split.csv",usecols=['STORY'])

newss = news.STORY.str.lower().str.replace(r'\|', ' ').str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(newss)
word_dist = nltk.FreqDist(words)

stopwords = nltk.corpus.stopwords.words('english')
words_except_stop_dist = nltk.FreqDist(w for w in words if w not in stopwords)


rslt = pd.DataFrame(word_dist.most_common(top_N),
                    columns=['Word', 'Frequency'])
print(rslt)

Это усеченный файл CSV

id    STORY
0     In the bag
1     What is your name
2     chips, bag

Я хотел бы сохранить вывод в новый CSV-файл, ожидаемый вывод должен выглядеть следующим образом

id    STORY                exist     How many
0     In the bag            1           2
1     What is your name     1           4
2     chips bag             0           0

1 Ответ

1 голос
/ 14 октября 2019
df = pd.DataFrame({"story":['In the bag', 'what is your name', 'chips, bag']})
stopwords = nltk.corpus.stopwords.words('english')
df['clean'] = df['story'].apply(lambda x : nltk.tokenize.word_tokenize(x.lower().replace(r',', ' ')))
df
    story               clean   
0   In the bag          [in, the, bag]
1   what is your name   [what, is, your, name]
2   chips, bag          [chips, bag]

df['clean'] = df.clean.apply(lambda x : [y  for y in x if y in stopwords])
df['exist'] = df.clean.apply(lambda x : 1 if len(x) > 0 else 0)
df['how many'] = df.clean.apply(lambda x : len(x)) 

df

    story               clean              exist    how many
0   In the bag          [in, the]              1    2
1   what is your name   [what, is, your]       1    3
2   chips, bag          []                     0    0

Примечание. Вы можете изменить регулярное выражение в соответствии с вашими требованиями. Вы можете удалить столбец clean или сохранить его, если он понадобится вам позже.

...