Как проанализировать обозначенные части файла CSV?Хитрость для обработки больших CSV-файлов с помощью цикла? - PullRequest
0 голосов
/ 24 сентября 2019

В настоящее время я работаю над магистерской диссертацией о добыче информации в рамках патентов.Только начал использовать Python и интегрировал пакет TextRazor.Моя цель - проанализировать CSV-файл с патентными данными и поместить темы из него в новый CSV-файл.

После импорта пакета TextRazor и настройки экстракторов я хочу открыть CSV-файл с соответствующими данными патента.TextRazor анализирует этот файл и выдает темы с релевантностью более 0,5.Я сохраняю эти темы в CSV-файле, который выглядит следующим образом:

Topics; 'topic 1'; 'topic 2'; 'topic 3'; ...; 'topic 130';

Моя проблема в том, что патентные данные могут быть слишком большими (более 10000 строк и 4 столбца) для анализа.Пакет может обрабатывать только до 250 КБ.Можно ли сделать цикл for, чтобы избежать этой проблемы?

Прямо сейчас я разбил CSV-файл, и процесс для каждого из них завершен.Файл CSV выглядит следующим образом:

docname; documents/text; day
44245; [text]; 22.12.2016
32424; [text]; 12.03.2015

...

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

Этофайл должен выглядеть так:

44245; 'topic 1'; 'topic 2'; ...
32424; 'topic 1'; 'topic 2'; ...

Я благодарен за любые советы или рекомендации.

Мой текущий код выглядит следующим образом (разделение файла по годам и каждому файлу только с 10 патентами):


textrazor.api_key = 'b033067632dba8a710c57f088115ad4eeff22142629bb1c07c780a10'

client = textrazor.TextRazor(extractors= ["entities", "categories", "topics"])

client.set_classifiers(['textrazor_newscodes'])

df17 = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patente 2017 Go Pro.csv').read()

df16 = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patente 2016 Go Pro.csv').read()

df15 = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patente 2015 Go Pro.csv').read()

df14 = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patente 2014 Go Pro.csv').read()

df13 = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patente 2013 Go Pro.csv').read()

patente2017 = df17

patente2016 = df16

patente2015 = df15

patente2014 = df14

patente2013 = df13

response2017 = client.analyze(patente2017)

response2016 = client.analyze(patente2016)

response2015 = client.analyze(patente2015)

response2014 = client.analyze(patente2014)

response2013 = client.analyze(patente2013)

topics2017 = set()
topics2016 = set()
topics2015 = set()
topics2014 = set()
topics2013 = set()


for topic in response2017.topics():
    if topic.score > 0.5:
        if topic.label not in topics2017:
            topics2017.add(topic.label)

for topic in response2016.topics():
    if topic.score > 0.5:
        if topic.label not in topics2016:
            topics2016.add(topic.label)

for topic in response2015.topics():
    if topic.score > 0.5:
        if topic.label not in topics2015:
            topics2015.add(topic.label)

for topic in response2014.topics():
    if topic.score > 0.5:
        if topic.label not in topics2014:
            topics2014.add(topic.label)

for topic in response2013.topics():
    if topic.score > 0.5:
        if topic.label not in topics2013:
            topics2013.add(topic.label)

import pandas as pd

list_topics2017=list(topics2017)
list_topics2016=list(topics2016)
list_topics2015=list(topics2015)
list_topics2014=list(topics2014)
list_topics2013=list(topics2013)

df17 = pd.DataFrame.from_dict({'2017' : list_topics2017}, orient='index')
df16 = pd.DataFrame.from_dict({'2016' : list_topics2016}, orient='index')
df15 = pd.DataFrame.from_dict({'2015' : list_topics2015}, orient='index')
df14 = pd.DataFrame.from_dict({'2014' : list_topics2014}, orient='index')
df13 = pd.DataFrame.from_dict({'2013' : list_topics2013}, orient='index')

df17.to_csv('Analyse-2013bis2017-GoPro.csv', sep=';', header='Topics Go Pro 2013 - 2017')
df16.to_csv('Analyse-2013bis2017-GoPro.csv',mode='a', sep=';', header=False)
df15.to_csv('Analyse-2013bis2017-GoPro.csv',mode='a', sep=';', header=False)
df14.to_csv('Analyse-2013bis2017-GoPro.csv',mode='a', sep=';', header=False)
df13.to_csv('Analyse-2013bis2017-GoPro.csv',mode='a', sep=';', header=False)

Прямо сейчас я получаю CSV-файл (как упомянуто выше) какэто:

2017; 'topic 1'; 'topic 2'; ...
2016; 'topic 1'; 'topic 2'; ...
2015; 'topic 1'; 'topic 2'; ...
2014; 'topic 1'; 'topic 2'; ...
2013; 'topic 1'; 'topic 2'; ...

1 Ответ

0 голосов
/ 24 сентября 2019

Я попробовал другой код, возможно, он поможет вам лучше понять мою цель.

import textrazor #import the package

textrazor.api_key = 'b033067632dba8a710c57f088115ad4eeff22142629bb1c07c780a10' #add the api

client = textrazor.TextRazor(extractors= ["entities", "categories", "topics"]) #define the extractors

df = open(r'C:\Users\Dogan\Desktop\Patentdaten\Patentdaten1.csv', errors='ignore') #open csv file with patent data

for rows in df:
    results= client.analyze(rows) # I want to analyze each row for itself, how can i save it

response=[]

for topic in results.topics:
    if topic.score > 0.99:
        if topic.label not in response.topics:
            response.add(topic.label) #for each row the topics extracted should be given


print(response)

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...