Используйте Python, чтобы извлечь три предложения на основе поиска слов - PullRequest
0 голосов
/ 15 мая 2019

Я работаю над вариантом использования текстового майнинга в python.Это предложения, представляющие интерес:

В результате это может продолжать оказывать неблагоприятное воздействие из-за колебаний обменных курсов иностранных валют.Определенные события, такие как угроза дополнительных тарифов на импортные потребительские товары из Китая , возросли.Магазины в основном расположены в торговых центрах и других торговых центрах.

Как мне извлечь предложение с ключевым словом "Китай"?Мне действительно нужно предложение до и после этого, на самом деле как минимум два предложения до и после.

Я попробовал следующее, как было сказано здесь :

import nltk
from nltk.tokenize import word_tokenize
sents = nltk.sent_tokenize(text)
my_sentences = [sent for sent in sents if 'China' in word_tokenize(sent)]

Пожалуйста, помогите!

1 Ответ

1 голос
/ 15 мая 2019

TL; DR

Используйте sent_tokenize, следите за индексом, где находится фокусное слово, и окном предложений, чтобы получить желаемый результат.

from itertools import chain
from nltk import sent_tokenize, word_tokenize
from nltk.tokenize.treebank import TreebankWordDetokenizer

word_detokenize = TreebankWordDetokenizer().detokenize

text = """As a result may continue to be adversely impacted, by fluctuations in foreign currency exchange rates. Certain events such as the threat of additional tariffs on imported consumer goods from China, have increased global economic and political uncertainty and caused volatility in foreign currency exchange rates. Stores are primarily located in shopping malls and other shopping centers, certain of which have been experiencing declines in customer traffic."""

tokenized_text = [word_tokenize(sent) for sent in sent_tokenize(text)]

sent_idx_with_china = [idx for idx, sent in enumerate(tokenized_text) 
                       if 'China' in sent or 'china' in sent]

window = 2 # If you want 2 sentences before and after.

for idx in sent_idx_with_china:
    start = max(idx - window, 0)
    end = min(idx+window, len(tokenized_text))
    result = ' '.join(word_detokenize(sent) for sent in tokenized_text[start:end])
    print(result)

Другой пример, pip install wikipedia first:

from itertools import chain
from nltk import sent_tokenize, word_tokenize
from nltk.tokenize.treebank import TreebankWordDetokenizer

word_detokenize = TreebankWordDetokenizer().detokenize

import wikipedia

text =  wikipedia.page("Winnie The Pooh").content

tokenized_text = [word_tokenize(sent) for sent in sent_tokenize(text)]

sent_idx_with_china = [idx for idx, sent in enumerate(tokenized_text) 
                       if 'China' in sent or 'china' in sent]

window = 2 # If you want 2 sentences before and after.

for idx in sent_idx_with_china:
    start = max(idx - window, 0)
    end = min(idx+window, len(tokenized_text))
    result = ' '.join(word_detokenize(sent) for sent in tokenized_text[start:end])
    print(result)
    print()

[выход]:

Пепельный лес в Англии, где разворачиваются истории о Пухе, является популярным туристическая достопримечательность, и включает в себя деревянный мост Пух, где Пух и Пятачок изобрел пометки. Оксфордский университет Винни Пух Общество было основано магистрантами в 1982 году. == Цензура в Китае == В Китайской Народной Республике изображения Пуха были подвергнуты цензуре в середине 2017 года с сайтов социальных сетей, когда интернет-мемы сравнивались Китайский президент Си Цзиньпин в Пух стал популярным. Фильм 2018 года Кристоферу Робину также было отказано в освобождении из Китая.

...