2016-06-21 2 views
-3

У меня есть проект, в котором мне нужно извлечь цитаты из огромного набора статей. Здесь, по цитатам, я имею в виду вещи, произнесенные людьми, например: Ален сказал, что «текст должен быть извлечен». Я использую NLTK для других моих задач, связанных с NLP, поэтому любое решение, использующее NLTK или любую библиотеку Python, было бы весьма полезным.Как извлечь цитаты из текста с помощью NLTK

Благодаря

ответ

0

Это квалифицируется как шаблон, то есть данные, которые вы ищете, всегда в кавычках "". Проще говоря, вы можете использовать regex для соответствия шаблону. Давайте возьмем этот пример she said " DAS A SDASD sdasdasd SADSD", " SA23 DSD " ASDAS "ASDAS1 3123$ %$%"

Регулярное выражение, которое работает для базового примера -

list = re.findall("\".*?\"", string) 

List дает нам ['" DAS A SDASD SADASD SADSD"', '" SA23 DSD "', '"ASDAS1 3123$ %$%"']

Здесь .*? соответствует любому символу (кроме символа новой строки) и шаблон совпадает с кавычки (начало \" и заканчивается \") буквально.

Обратите внимание на то, что кавычки в кавычках нарушают этот код. Вы не получите ожидаемого результата.

+0

Это подбирает что-либо между кавычками. В зависимости от текста, который вы оцениваете, вы получите кучу мусора, о котором не сообщается речь ... просто материал, завернутый в кавычки, как буква «А», слово «неясное» означает ... и т. Д. – Joseph

+0

Я работал в предположении, что OP работает с ** Структурированными данными, которые имеют значащий разговор **, потому что OP говорит: «Мне нужно извлечь цитаты из огромного набора статей». Поэтому мое предположение является разумным. Я добавлю +1 для добавления чего-то хорошего в ответы. –

1

Как уже упоминалось Mayur, вы можете сделать регулярное выражение, чтобы забрать все, что между кавычками

list = re.findall("\".*?\"", string) 

Проблема вы будете работать в том, что там может быть удивительно большое количество вещей, заключенная в кавычки, которые являются на самом деле не котировки.

Если вы делаете академические статьи, вы можете найти номер после закрытия цитаты, чтобы забрать номер сноски. Иначе с не научными статьями, возможно, вы могли бы запустить что-то вроде:

"(said|writes|argues|concludes)(,)? \".?\"" 

может быть более точным, но рискует потерять котировки, такие как Цитаты (Цитата вызовут у вас проблемы в любом случае, потому что они могут включать в себя строку перед закрывающей кавычкой)

Что касается использования NLTK, я не могу придумать ничего такого, что может помочь, кроме, возможно, wordnet для поиска синонимов для «сказанного».

Смежные вопросы