.findall正则表达式不会分配给变量

时间:2015-12-04 20:58:24

标签: python regex nlp findall

我正在尝试创建一个搜索大量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

1 个答案:

答案 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