【问题标题】:Extracting Nouns and Entities using Regex and POS使用 Regex 和 POS 提取名词和实体
【发布时间】:2015-10-08 10:47:04
【问题描述】:

我不是python专家,我只是在尝试一些算法。

我有一句话,比如,

"The maker of Sam Global Ent, Sam Helsen has bought many stocks in a private intelligence firm Samligence."

我正在尝试使用 POS 标记器获取所有名词,但是,如果后续实体以大写字母开头,则它们应被视为一个实体。

例如:“Sam Global Ent”应被视为一个实体。

我正在寻找的输出如下:

[u'maker',                     --  Noun
 u'Sam Global Ent',            --  Considered as one entity
 u'Sam Helsen',                --  Considered as one entity
 u'stocks',                    --  Noun
 u'intelligence',              --  Noun
 u'firm',                      --  Noun 
 u'Samligence']                --  Noun/entity

我已经编写了代码来分别完成这两项工作,但我不知道如何以高效的方式组合它们。

到目前为止我写的代码是..

对于提取以大写字母开头的后续实体:

find_entities=re.findall(r'\b[A-Z]\w+(?:\s\b[A-Z]\w+)*', sentences, re.DOTALL)

输出:

find_entities= ['The', 'Sam Global Ent', 'Sam Helsen', 'Samligence']

提取所有名词:

words=word_tokenize(sentences.decode('utf-8'))
    for pos in pos_tag(words):
        if 'NN' in pos[1]:
            entity_nouns.append(pos[0])

输出:

 entity_nouns=
[u'maker',
 u'Sam',
 u'Global',
 u'Ent',
 u'Sam',
 u'Helsen',
 u'stocks',
 u'intelligence',
 u'firm',
 u'Samligence']

我想过像交叉路口这样的方法。例如将“find_entities”分解为单个元素(['The', 'Sam', 'Global', 'Ent', 'Sam', 'Helsen', 'Samligence']),然后将其减去 entity_nouns,然后添加再次找到 find_entities 的结果。但这似乎是一个非常漫长的过程。

如果有人可以帮助我,我会很高兴。

【问题讨论】:

    标签: python regex nlp


    【解决方案1】:

    考虑一个简单的方法:您已经将句子标记为单词。无需使用正则表达式方法来查找实体,只需对单词列表进行一次迭代,然后组合列表中以大写字母开头的连续单词。

    【讨论】:

    • 知道了,但这是否足够快?与包括遍历每个单词的方法相比,通常预定义的函数,如“regex”、“intersection (using sets)”、“union”等,速度更快。
    • 我认为如果不进行实际测量很难进行比较。正则表达式也不是免费的。无论如何,除非您期望列表迭代执行 可笑 糟糕,否则我会认为这是“过早的优化”。
    【解决方案2】:

    你试过TextBlob吗?它提取名词短语:

    >>> from textblob import TextBlob
    >>> txt = """The maker of Sam Global Ent, Sam Helsen has bought many stocks in a private intelligence firm Samligence."""
    >>> blob = TextBlob(txt)
    >>> blob.noun_phrases
    WordList([u'sam global ent', u'sam helsen', u'private intelligence firm', 'samligence'])
    

    【讨论】:

    • 谢谢,这真的很有帮助。
    猜你喜欢
    • 2021-01-27
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多