gpt4 book ai didi

python - 使用 spacy 或 nltk 从段落中提取文本

转载 作者:行者123 更新时间:2023-12-04 07:29:04 25 4
gpt4 key购买 nike

对不起,如果这是重复但我找不到答案,或者至少想知道是否有一种干净的方法来做到这一点。
我有一段话需要从中提取某些实体。
任何字母数字字符串,如:PQ1234、Z123 等
任何字母数字字符串后跟一个空格后的另一个数字:PQ1234 01、Z123 08
任何字母数字字符串后跟一个空格后的另一个数字:PQ1234 01 02, Z123 07 08。作为下面的具体示例, 中的字符串粗体 应该提取:
01:曾经,有一个男孩叫 AZ009 看村子就无聊了 PQ123 01 放牧的羊 B0199 .为了自娱自乐,他唱出了“ R0199 01 09 ! R0199 01 09 ! R0199 01 09 在追羊!”
休息一下我想忽略的一切。我尝试使用 spacy 的 NOUN、PROPN 过滤器以及 isalpha 和 isdigit 等字符串函数来进一步过滤它,但它变得过于基于规则,无法很好地实现它。
我是 NLP 的新手,所以想知道是否有更聪明的方法,或者是否通过一些 RegEx 规则,我可以做得更好。
谢谢

最佳答案

假设模式:

  • 以大写字母开头 \b[A-Z]+
  • 继续一些数字和空格 [\s\d]+
  • 并且总是以数字 [\d]\b 结尾

  • 你可以试试:
    import re

    text = """Once, there was a boy named AZ009 who became bored when he watched over the village PQ123 01 sheep grazing on the B0199. To entertain himself, he sang out, “R0199 01 09! R0199 01 09! R0199 01 09 is chasing the sheep!”"""

    re.findall(r'\b[A-Z]+[\s\d]+[\d]\b', text)
    [出去]:
    ['AZ009', 'PQ123 01', 'B0199', 'R0199 01 09', 'R0199 01 09', 'R0199 01 09']

    如果您需要尝试提取的字符串偏移量/位置,请尝试:
    for match in re.finditer(r'\b[A-Z]+[\s\d]+[\d]\b', text):
    print(match.start(), match.start() + len(match.group()), match.group())
    [出去]:
    28 33 AZ009
    84 92 PQ123 01
    114 119 B0199
    157 168 R0199 01 09
    170 181 R0199 01 09
    183 194 R0199 01 09

    关于python - 使用 spacy 或 nltk 从段落中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68052645/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com