Более эффективная реализация Textacy / spacy 'subject_verb_object_triples' - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь реализовать функцию 'extract.subject_verb_object_triples' из textacy в моем наборе данных.Однако код, который я написал, очень медленный и требует много памяти.Есть ли более эффективная реализация?

import spacy
import textacy

def extract_SVO(text):

    nlp = spacy.load('en_core_web_sm')
    doc = nlp(text)
    tuples = textacy.extract.subject_verb_object_triples(doc)
    tuples_to_list = list(tuples)
    if tuples_to_list != []:
        tuples_list.append(tuples_to_list)

tuples_list = []          
sp500news['title'].apply(extract_SVO)
print(tuples_list)

Пример данных (sp500news)

    date_publish  \
0       2013-05-14 17:17:05   
1       2014-05-09 20:15:57   
4       2018-07-19 10:29:54   
6       2012-04-17 21:02:54   
8       2012-12-12 20:17:56   
9       2018-11-08 10:51:49   
11      2013-08-25 07:13:31   
12      2015-01-09 00:54:17   

 title  
0       Italy will not dismantle Montis labour reform  minister                            
1       Exclusive US agency FinCEN rejected veterans in bid to hire lawyers                
4       Xis campaign to draw people back to graying rural China faces uphill battle        
6       Romney begins to win over conservatives                                            
8       Oregon mall shooting survivor in serious condition                                 
9       Polands PGNiG to sign another deal for LNG supplies from US CEO                    
11      Australias opposition leader pledges stronger economy if elected PM                
12      New York shifts into Code Blue to get homeless off frigid streets                  

1 Ответ

0 голосов
/ 27 декабря 2018

Это должно несколько ускорить его -

import spacy
import textacy
nlp = spacy.load('en_core_web_sm')
def extract_SVO(text):
    tuples = textacy.extract.subject_verb_object_triples(text)
    if tuples:
        tuples_to_list = list(tuples)
        tuples_list.append(tuples_to_list)

tuples_list = []          
sp500news['title'] = sp500news['title'].apply(nlp)
_ = sp500news['title'].apply(extract_SVO)
print(tuples_list)

Пояснение

В реализации OP, nlp = spacy.load('en_core_web_sm') вызывается так изнутри функции, которую он загружает каждый раз.Я чувствую, что это самое большое узкое место.Это можно убрать, и это должно ускорить его.

Кроме того, tuple приведение к list может произойти, только если кортеж не пуст.

...