我正在尝试创建一个搜索大量nltk.text.Text输入的函数,并输出“贡献”或“捐赠”之后的所有单词(请参阅下面的正则表达式)。
正则表达式工作正常,但是当我尝试将它分配给变量以便我的函数返回它时,变量不会更新,我的函数也不会返回任何内容。
即。 type(donation)= NoneType object
我最终想要将此函数应用于数据框的每一行,并将捐赠值输出到该数据框中的新列,但是当我现在尝试时,每个输出都是“无”
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 :(得分:2)
正如R Nar所述.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