【发布时间】:2015-12-04 20:58:23
【问题描述】:
我正在尝试创建一个函数来搜索一大块 nltk.text.Text 输入并输出“contribute”或“donate”之后的所有单词(请参阅下面的正则表达式)。
正则表达式运行良好,但是当我尝试将其分配给一个变量以让我的函数返回它时,该变量不会更新并且我的函数什么也不返回。
即type(donation) = NoneType 对象
我最终想将此函数应用于数据帧的每一行并将捐赠值输出到该数据帧中的新列,但是当我现在尝试时,每个输出都是“无”
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
【问题讨论】:
-
您确定您的正则表达式有效吗?
NoneType的返回通常意味着没有匹配项 -
是的,它可以自己工作...见上面的更新
-
奇怪的是,如果您查看docs,使用
Text.findall实际上并没有返回任何内容,它只是打印它。相反,看起来将您的Text对象传递给TokenSearcher对象并在TokenSearcher上调用.findall实际上会返回您的匹配项 -
正则表达式太贪心了,我会把所有的
.*替换成[>]*。