2015-12-04 4 views
0

Я пытаюсь создать функцию, которая ищет фрагмент ввода nltk.text.Text и выводит все слова, следующие за «Contribute» или «donate» (см. Регулярное выражение ниже)..findall Регулярное выражение не присваивает переменной

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

т.е. типа (пожертвование) = NoneType объект

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

def find_donation_orgs(x): 
    text = nltk.Text(nltk.word_tokenize(x)) 
    donation = text.findall(r"<\.> <.*>{,15}? <donat.*|contrib.*|Donat.*|Contrib.*> <.*>*? <to> (<.*>+?) <\.|\,|\;> ") 
    return donation 

Мой FindAll регулярное выражение делает работу сам по себе:

text.findall(r"<\.> <.*>{,15}? <donat.*|contrib.*|Donat.*|Contrib.*> <.*>*? <to> (<.*>+?) <\.|\,|\;> ") 

возвращает это для примера фрагмент текста:

visit brother Alfred Fuller; the research of Dr. Giuseppe Giaccone at 
Georgetown University 

Для вашего удобства:

text = nltk.Text(nltk.word_tokenize(df.Obit.iloc[7])) 
print(text) 

x = text.findall(r"<\.> <.*>{,15}? <donat.*|contrib.*|Donat.*|Contrib.*> <.*>*? <to> (<.*>+?) <\.|\,|\;> ") 

print(x) 

возвратов:

<Text: M. Jay Janssen , age 95 of Zeeland...> 
Resthaven Care Community 
None 
+0

Вы уверены, что ваше регулярное выражение работает? возврат «NoneType» обычно не означает совпадений –

+0

yep, он работает сам по себе ... см. обновление выше –

+1

, если вы посмотрите на [docs] (http://www.nltk.org/_modules/nltk /text.html), используя 'Text.findall', на самом деле НЕ ВОЗВРАЩАЕТ, он просто печатает его. вместо этого он выглядит как передача объекта 'Text' объекту TokenSearcher и вызов' .findall' в 'TokenSearcher' будет фактически возвращать ваши совпадения –

ответ

2

Как отмечалось выше R Нар .findall регулярное выражение только печатает и не возвращает ничего ... TokenSearcher решает проблему отлично ... он выводит список токенов в отличие от строки, но выполняет задание.

from nltk.text import TokenSearcher 

def find_donation_orgs(x): 
    text = nltk.Text(nltk.word_tokenize(x)) 
    donation = TokenSearcher(text).findall(r"<\.> <.*>{,15}? <donat.*|contrib.*|Donat.*|Contrib.*> <.*>*? <to> (<.*>+?) <\.|\,|\;> ") 
    return donation 
Смежные вопросы