Я новичок в области интеллектуального анализа данных / текстового анализа, поэтому я не уверен, что использую правильную терминологию. Я пытаюсь придумать процесс извлечения групп связанного контента для последующего применения НЛП и других методов извлечения значимых данных из него. У меня есть начальные данные, которые выглядят примерно так:
Product Name - $-25- 15
Product Name - $3
Product Bundle $100
-Product 1
-Product 2 Condition
-Product 3 Condition
Product - Version - Condition $100
Product
Extras
Extras
More Info
$20
Product
Extras
Condition
$15
Product (Condition) 50
Product (Condition) 25
Product (Condition) 10
Цель состоит в том, чтобы получить такой список с уникальной записью для каждого "списка", сгруппированной с соответствующими метаданными:
[Product Name - $-25- 15], [Product Name - $3], [Product Bundle $100 -Product 1 -Product 2 Condition -Product 3 Condition], [Product - Version - Condition $100]
Полный текст написан многими разными авторами и часто переключает форматы в одном посте, поэтому я не могу определить, в каком формате он находится, и обработать весь документ. Единственное, что объединяет все форматы, это то, что они имеют новые разрывы строк, а не плотный абзац текста. Работая с этим, у меня есть несколько идей о том, как подойти к нему:
Вариант 1: элементарный
- Разделить документ на массив новыми строками ( \ n)
- Если между записями есть дополнительный пустой пробел, сгруппируйте предыдущие
- Если места нет, определите, есть ли цена, если это так, рассмотрите его собственную группу
Этот параметр очень прост и может работать при двойном интервале. Однако он не может использовать число в качестве heuristi c, чтобы определить, является ли это новая группа, так как названия продуктов, дополнения, условия могут содержать числа, если они разделены одним пробелом.
Опция 2: NLP
Эта опция будет пытаться классифицировать каждое слово в документе как Название продукта, Условие, Атрибут, Цена. Затем снова обработайте документ, чтобы сгруппировать текст так, чтобы он имел имя и цену, а также, при необходимости, условие и дополнительные метаданные.
Проблема этого подхода заключается в том, что дополнительные элементы и комплекты также являются продуктами, поэтому их классификация будет определите, что они являются уникальной записью с метаданными, если они принадлежат «родительскому» продукту из-за того, как они расположены в документе.
Вариант 3: что-то еще?
Моей первой мыслью было сначала обработать документ по группам, чтобы, когда НЛП знал, что все слова в этой группе относились к одному и тому же товар. У меня есть список всех наименований продуктов и довольно хорошее условие. Дополнения, версии и другой текст уникальны, поэтому могут возникнуть некоторые проблемы при попытке определить, как группировать.
Кажется, что может потребоваться сочетание этих двух факторов, потому что то, как их расставляет автор, в конечном счете, все в комплекте. Однако мы не сразу узнаем, относится ли следующий набор контента к первому или новому списку без какого-либо другого процесса.
INPUT
Mario Party - $10
Party Games Bundle $100
-Super Mario Bros
-Mario World - NEW
Donkey Kong - 2017 Version - Used $10
Wii Sports
Includes Controllers
Also includes memory card
$10
Grand Theft Auto
San Andreas
Includes poster
Used
$10
Zelda (Unopened box) 10
ВЫХОД (JSON)
{ listings: [
{ name: 'Mario Party', condition: null, version: null, currency: '$', price: 10, includes: null },
{ name: 'Party Games Bundle', condition: null, version: null, currency: '$', price: 100, includes: ['Super Mario Bros', 'Mario World - NEW'] },
{ name: 'Donkey Kong', condition: 'Used', version: '2017 Version', currency: '$', price: 10, includes: null },
{ name: 'Wii Sports', condition: null, version: null, currency: '$', price: 10, includes: ['Includes Controllers', 'Also includes memory card'] },
{ name: 'Grand Theft Auto', condition: 'Used', version: 'San Andreas', currency: '$', price: 10, includes: 'Includes poster' },
{ name: 'Zelda', condition: 'Unopened box', version: null, currency: '$', price: 10, includes: null }
] }