как извлечь предложения в CSV-файл на основе ключевых слов из другого CSV-файла и удалить его из основного - PullRequest
1 голос
/ 02 февраля 2020

У меня есть 2 CSV-файла, одно из которых содержит предложения, как показано ниже

Как дела

Я хочу, чтобы d ie

Я был дома

Я пошел спать на работе

у него плохая репутация

это я пошел к нему

хорошо спал дома

, а другой файл csv содержит слова с частотой, как показано ниже

слово freq

и 500

you 450

me 300

есть 250

ваш 240

сон 200

работа 150

дом 100

d ie 50

Я пытаюсь извлечь предложения, основанные на словах с частотой от 300 до 100, в новый файл CSV и удалить это предложение после извлечения из основного файла CSV, потому что иногда повторение будет происходит при поиске нового ключевого слова или слова, это код, который мне удалось создать, но он не дает мне желаемого результата:

import sys
import pandas as pd
import re
import string
if len(sys.argv) == 1:
    print("please provide a CSV file to analys")
else:
    fileinput = sys.argv[1]
    dic = sys.argv[2]

wdata = pd.read_csv(fileinput, nrows=0).columns[0]
skip = int(wdata.count(' ') == 0)
wdata = pd.read_csv(fileinput, names=['sentences'], skiprows=skip)

data = wdata['sentences'].str.replace('[^\w\s]', ' ')
keywords=pd.read_csv(dic)
keywords=keywords.loc[keywords['freq'].between(100, 300, inclusive=False), 'word']
df1 = data[data['sentences'].str.split(expand=True).isin(keywords).any(axis=1)]
#deleted rows by keywords
df2 = data[~data['sentences'].str.split(expand=True).isin(keywords).any(axis=1)]
print(df1)


, и я не знаю, как это сделать. После извлечения фразы в главном файле, я ожидаю что-то вроде этого

enter image description here

1 Ответ

2 голосов
/ 02 февраля 2020

Я думаю, вам нужно Series.between для выбора ключевых слов:

keywords=keywords.loc[keywords['freq'].between(100, 300, inclusive=False), 'word']
print (keywords)
3     have
4     your
5    sleep
6     work
Name: word, dtype: object

А затем выберите Series.str.split и DataFrame.isin с DataFrame.any

df1 = data[data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (df1)
3    I went to sleep at work
6     have a good sleep home
Name: sentences, dtype: object

#deleted rows by keywords
df2 = data[~data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (df2)
0                  how are you
1                I want to die
2                   I was home
4      he has a bad reputation
5    it was me who went to him
Name: sentences, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...