Я ищу решение для извлечения списка понятий, о которых идет текстовый (или html) документ. Я хотел бы, чтобы концепции были темами wikidata (или freebase или DBpedia).Как найти список тем wikidata (или freebase или DBpedia), о которых идет речь?
Например «Bad песня Микаэля Джексон» должен вернуть Майкл Джексон (художник, викиданные Q2831) и Bad (песню, викиданные Q275422). Как показывает этот пример, система должна быть надежной для орфографических ошибок (Mikael) и двусмысленности (Bad).
В идеале система должна работать на нескольких языках, она должна работать как на коротких текстах, так и на длинных текстах, а когда она неуверена, она должна возвращать несколько тем (например, Bad song + Bad album). Кроме того, в идеале он должен быть открытым исходным кодом и иметь API-интерфейс python.
Да, это похоже на список для Санта-Клауса. Есть идеи?
Редактировать
Я проверил несколько решений, но не серебряная пуля до сих пор.
- NLTK разбирает текст и извлекать «именованные объекты» (AFAIU, часть предложения, которая относится к имени), но он не возвращает викиданные темы, только простой текст. Это означает, что он, вероятно, не поймет, что «Я снимал шерифа» - это название песни Боба Марли, оно будет рассматривать это как предложение.
- OpenNLP делает примерно то же самое.
- Wikidata имеет API поиска, но это всего лишь один термин за раз, и он не справляется с значениями.
- Есть несколько коммерческих услуг (OpenCalais, AlchemyAPI, CogitoAPI ...), но никто не сияет, ИМХО.
@ Matt1776 Возможно, вопрос звучал слишком расплывчато, но это проблема программирования в реальной жизни, с которой я сталкиваюсь, и я уверен, что у других было (или будет) то же самое. Во всяком случае, большое спасибо за ваш вид upvote. – MiniQuark
Что вы думаете о моем ответе? – amirouche
Привет @amirouche, спасибо за ваш ответ. Мне нравится идея (+1), но я не могу принять этот ответ: я пробовал что-то подобное с помощью NLTK, и, к сожалению, это терпит неудачу, когда тема имеет имя, которое выглядит как кусок предложения, например «Я застрелил шерифа», Боб Марли. Это происходит очень часто с именами песен или именами артистов (например, Rage против машины). Я склоняюсь к решению, которое сначала будет искать все имена тем, которые он может найти (даже приблизительно), а затем ранжировать их с использованием различных сигналов, включая, возможно, некоторые сигналы НЛП (это существительное? Это человек?). Как вы думаете? – MiniQuark