Поиск определенных строковых объектов в тексте

Допустим, у меня есть свободный текст, заполненный информацией о конкретных автомобилях, марках автомобилей и другой информацией, связанной с автомобилями. Я хочу извлечь эту информацию из текста по определенному шаблону:

  • Бренд:
  • Модель:
  • Цвет:

Например: «Майк уехал на черном «Мерседесе» с еще четырьмя людьми. Кроме того, в Европе у него есть BMW M3».

Шаблон 1: Марка: Mercedes, Модель: -, Цвет: Черный

Шаблон 2: Марка: BMW, Модель: M3, Цвет: -

Каков наилучший способ решить эту проблему в Python? Хотя у меня есть некоторые знания о NLTK, тегах POS и NP-chunking, я думаю, что это можно было бы сделать проще, когда я смогу распознавать определенные термины, например, из (вложенного) словаря, который содержит списки. Таким образом, он будет вести себя как контролируемый словарь.

Надеюсь, у кого-то есть хороший пример или он может указать мне правильное направление. Спасибо


person Boyos123    schedule 05.05.2017    source источник
comment
Не могли бы вы добавить примеры текстов?   -  person VMRuiz    schedule 05.05.2017
comment
Добавьте текстовый файл или образец текстового файла   -  person Himanshu dua    schedule 05.05.2017
comment
отредактировал вопрос   -  person Boyos123    schedule 05.05.2017
comment
У вас должна быть какая-то структура данных, где вы можете хранить марку, модель, цвет.   -  person DanteVoronoi    schedule 05.05.2017
comment
может быть 3 метода. 1) Регулярные выражения 2) NER и поиск данных в определенных тегах NER 3) Создание модуля извлечения информации с использованием таких методов, как CRF, RNN и т. д. Надеюсь, это поможет   -  person StatguyUser    schedule 17.01.2018


Ответы (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}]
person stovfl    schedule 05.05.2017