Какой самый простой способ реализации майнинга терминов ассоциации в Solr? - PullRequest
11 голосов
/ 13 сентября 2011

майнинг ассоциаций , кажется, дает хорошие результаты для извлечения связанных терминов в текстовом корпусе. Есть несколько работ на эту тему, включая известный метод LSA . Самый простой способ найти ассоциации - это построить матрицу совместного вхождения docs X terms и найти термины, которые встречаются в одних и тех же документах чаще всего. В моих предыдущих проектах я реализовывал это непосредственно в Lucene путем итерации по TermDocs (я получил это, вызвав IndexReader.termDocs (Term) ). Но я не вижу ничего похожего в Solr.

Итак, мои потребности :

  1. Для получения большинства связанных терминов в определенном поле.
  2. Для извлечения термина , ближайшего к указанному в определенном поле.

Я буду оценивать ответы следующим образом:

  1. В идеале я хотел бы найти компонент Solr, который непосредственно покрывает указанные потребности, то есть что-то для непосредственного получения связанных терминов.
  2. Если это невозможно, я ищу способ получить информацию матрицы совпадений для указанного поля.
  3. Если это тоже не вариант, я хотел бы узнать самый простой способ: 1) получить все термины и 2) получить идентификаторы (номера) документов, в которых встречаются эти термины.

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Вы можете экспортировать индекс Lucene (или Solr) в Mahout , а затем использовать скрытое выделение дирихле.Если LDA не достаточно близок к LSA для ваших нужд, вы можете просто взять матрицу корреляции из Mahout, а затем использовать Mahout для разложения по сингулярным значениям.

Я не знаю ни одного компонента LSA для Solr.

2 голосов
/ 22 сентября 2011

Поскольку на мои вопросы до сих пор нет ответов, я должен написать свои мысли и принять их.Тем не менее, если кто-то предложит лучшее решение, я с радостью приму его вместо моего.

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

  1. Все термины или, по крайней мере, самые частые , потому что редкие термины не влияют на результат майнинга ассоциаций ихnature.
  2. Документы, в которых встречаются эти термины , опять же, как минимум верхние документы.

Обе эти задачи могут быть легко выполнены с помощью стандартных компонентов Solr.

Для извлечения терминов TermsComponent или может использоваться граненый поиск .Мы можем получить только верхние термины (по умолчанию) или все термины (установив максимальное количество используемых терминов, подробности см. В документации по конкретной функции).

Получение документов с данным термином - просто поиск по этому термину.Слабым местом здесь является то, что нам нужен 1 запрос на срок, и может быть тысячи условий.Еще одним слабым местом является то, что ни простой, ни фасетный поиск не предоставляют информацию о количестве вхождений текущего термина в найденном документе.

Имея это, легко построить матрицу совместного использования.Для моей ассоциации можно использовать другое программное обеспечение, такое как Weka или написать собственную реализацию, скажем, Apriori алгоритма .

0 голосов
/ 20 февраля 2017

Вы можете получить количество вхождений текущего термина в найденном документе в следующем запросе:

http://ip:port/solr/someinstance/select?defType=func&fl=termfreq(field,xxx),*&fq={!frange l=1}termfreq(field,xxx)&indent=on&q=termfreq(field,xxx)&sort=termfreq(field,xxx) desc&wt=json
...