LINUX.ORG.RU

Извлечение фактов из неструктурированного текста

 , ,


1

2

Есть текст сообщений.

Вопрос: можно ли извлечь «факты» в «нормализованной форме» из такого текста с помощью автоматизированного лингвистического анализа? Тематика узкая - фитнес.

Извлекать нужно: виды упражнений, информацию о питании, вес (массу), время

Или лучше regexов понаписать и поиск по известным словам?

Сообщения такого плана:

  • Вес 56 килограммов.
  • Взвесился 65 килограмм
  • Взвесилась только что, 54 кило
  • Масса 65 килограмм
  • Пожал 90, два подхода по 8 раз.
  • Сегодня в обед съела салат из томатов и огурцов со сметаной, чай, бутерброд с колбасой
  • Прием пищи: макароны по-флотски, чай, суп с фрикадельками
  • Вчера съела торт кремовый две тарелки
  • Съел салат весенний 200 грамм. В нём 200 килокалорий на 100 граммов.
  • Съел утром 200 килокалорий
  • Вечером на обед были язычки колибри. В них 80 грамм углеводов, 10 граммов белка, жиров 5 грамм и 2 гр. золы. Всего 36 калорий
  • Манная каша - 56 калорий
  • жим лежа 60 пять по шесть
  • эллипс 8 минут за 7.55
  • блок пять по десять 45,45,45,45,40
  • трицепс 40кг 3 по 10
  • жим пустой гриф 1 на 30
  • приседы 3х6 60кг + 2х6 65кг


Последнее исправление: ahdenchik (всего исправлений: 1)

Ответ на: комментарий от panzerito

все просто: ты можешь показать пример с разбором? справится. не можешь --- не справится :)

Rastafarra ★★★★
()
Ответ на: комментарий от ahdenchik

NLP тут не нужно (потому что задача, вероятно, отлично решится регулярками или основанным на них механизмом). Разве что его небольшое подмножество.

Но если ты так хочешь усложнить себе жизнь - у меня тут возникла, возможно, схожая задача.

Но кое-кому взбрело в голову (ну а я, дурак, подогрел интерес :-) ), что без NLP никуда (хайп же, вот). Потому я накатал на третьепхытоне один велосипед с :

  • разбором текста в дерево (spacy)
  • написанием правил для извлечения поддеревьев (читай - у нас на входе «когда $условие $действие» - а в дереве (действие (когда (условие)) )
  • собственно, извлечением сего поддерева (к которому потом можно применить ещё пачку таких же извлекалок или обработать как есть).
  • парой хрен знает как решаемых проблем (одна решаема, но влом, вторая - с решением на уровне «жопой чую, что так должно работать»).

Если интересно - смогу забросить в течение дня-другого. Разумеется, возможно, что придётся мне напомнить :-)

з.ы. но если тебе таки нужен русский - придётся отказаться от spacy. По идее - мой код легко адаптировать под NLTK-ю обёртку вокруг MaltParser, а для него вроде есть модель с русским. Делать я этого, конечно, не стану - максимум подскажу, куда копать.

з.ы.2. но я почти уверен, что яндексоидный «томита-парсер» справится с задачей лучше моего велосипеда. Если его осилить.

alex4321
()
Последнее исправление: alex4321 (всего исправлений: 2)
Ответ на: комментарий от alex4321

И да, на всякий случай вкину -

(действие (когда (условие))
-
(не (следствие (это) (лисп (головногоМозга))))

alex4321
()
Последнее исправление: alex4321 (всего исправлений: 1)
Ответ на: комментарий от alex4321

отлично решится регулярками или основанным на них механизмом

структурированными

на sam в plan9 можно писать структурированные регекспы

NLP тут не нужно

что, морфологии нет совсем никакой? вообще нужно что-то типа упрощённого технического русского

anonymous
()
Ответ на: комментарий от anonymous

пример на питоне


Сообщения такого плана:

    Вес 56 килограммов.
    Взвесился 65 килограмм
    Взвесилась только что, 54 кило
    Масса 65 килограмм
    Пожал 90, два подхода по 8 раз.
    Сегодня в обед съела салат из томатов и огурцов со сметаной, чай, бутерброд с колбасой
    Прием пищи: макароны по-флотски, чай, суп с фрикадельками
    Вчера съела торт кремовый две тарелки
    Съел салат весенний 200 грамм. В нём 200 килокалорий на 100 граммов.
    Съел утром 200 килокалорий 

не, роды съел/съела, синонимы вес/масса/приём пищи — всё равно какая-та морфология минимальная нужна. хоть и на структуральнейших регекспах. и это если ещё порядок слов не нарушается, который портит структуру (типа парсить «взвесился 10500 килограмм» и «10500 килограмм новый вес» в однотипную структуру)

anonymous
()
Ответ на: комментарий от anonymous

вес/масса/приём пищи — всё равно какая-та морфология

Хм, синонимы - это несколько иное. Ну и да - а нужно ли? Вероятно, для авторской задачи хватит и заранее заготовленного их списка (в нашей регулярке).

и это если ещё порядок слов не нарушается

Ну, я бы подошёл скорее со стороны: - фраза подходит под выражение вида «N кило» - фраза подходит под выражение «вес» - раз оба условия выполнены - извлечем N. Конечно, тут весьма вероятны ложноположительные срабатывания, но будет ли это большей проблемой чем реализация парсера (ну, скорее - клепание обёрток вокруг готовых, да)?

alex4321
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.