【问题标题】:Find specific string objects in text在文本中查找特定的字符串对象
【发布时间】:2017-10-03 12:51:35
【问题描述】:

假设我有一个免费文本,其中包含有关特定汽车、汽车品牌和其他汽车相关信息的信息。我想根据某个模板从文本中提取这些信息:

  • 品牌:
  • 型号:
  • 颜色:

例如:“Mike 和另外四个人开着一辆黑色奔驰车离开了。而且他在欧洲还拥有一辆 BMW M3。”

模板 1:品牌:Mercedes,型号:-,颜色:黑色

模板 2:品牌:BMW,型号:M3,颜色:-

在 Python 中解决此问题的最佳方法是什么?尽管我对 NLTK、POS 标记和 NP 分块有一些了解,但我认为一旦我能够识别特定术语(例如包含列表的(嵌套)字典),我就可以用一种更简单的方法来完成它。因此,它的行为就像一个受控词汇表。

希望有人有一个很好的例子,或者可以为我指明正确的方向。谢谢

【问题讨论】:

  • 可以添加文本示例吗?
  • 添加文本文件或文本文件样本
  • 编辑了问题
  • 你必须有一些数据结构可以存储品牌、型号、颜色。
  • 可以有3种方法。 1) 正则表达式 2) NER 并在特定 NER 标签中查找数据 3) 使用 CRF、RNN 等技术构建信息提取模块。希望这会有所帮助

标签: python nlp nltk text-mining information-extraction


【解决方案1】:

假设

  1. 你有一本这样的字典:
    品牌 = ['Mercedes', 'BMW']
    型号 = ['M3']
    颜色 = ['黑色']
  2. 三个关键字在文本中的顺序始终如下:
    颜色品牌模型

使用您的示例text,我得到以下结果:

words = text.split(' ')
templates = []
for i, word in enumerate(words):
    if word in Brand:
        template = {'Brand': None, 'Model': None, 'Color': None}
        template['Brand'] = word
        if words[i-1] in Color:
            template['Color'] = words[i-1]
        if words[i+1] in Model:
            template['Model'] = words[i+1]

        templates.append( template )

print(templates)

[{'Brand': 'Mercedes', 'Model': None, 'Color': 'black'}, {'Brand': 'BMW', 'Model': 'M3', 'Color': None}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多