【问题标题】:.findall Regular Expression won't assign to a variable.findall 正则表达式不会分配给变量
【发布时间】: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 实际上会返回您的匹配项
  • 正则表达式太贪心了,我会把所有的.*替换成[&gt;]*

标签: python regex nlp findall


【解决方案1】:

正如上面提到的 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

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2014-07-20
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-08-13
    • 2011-12-06
    相关资源
    最近更新 更多