Алгоритмы или библиотеки для текстового анализа, конкретно: доминирующие слова, фразы через текст и набор текста

Полагаю, вы видели ответы, такие как , этот , поскольку вы упоминаете, что не удаляете прослушиватели событий на дочерних элементах. Конечно, выполнить глубокое клонирование не получится, но что может сработать, так это создать неглубокое клонирование, а затем перенести дочерние узлы в клон. Это немного больше работы, но она будет делать то, что вы хотите.

Основная работа находится в setTimeout, все остальное на самом деле просто настройка.

Здесь я присоединяю два прослушивателя событий щелчка: один к кнопке и один к контейнеру div. до 5 секунд setTimeout, нажатие кнопки запустит обоих слушателей (поэтому вы увидите журналы консоли для КНОПКИ и DIV). После таймера вы все равно увидите событие BUTTON.

var rem = document.getElementById('rem');
var btn = document.getElementById('btn');
function onClick(e) {
  var t = e.currentTarget
  console.log(t.tagName);
}
rem.addEventListener('click', onClick);
btn.addEventListener('click', onClick);

setTimeout(() => {
  console.log('removing events from div');

  // shallow clone
  var rem2 = rem.cloneNode(false);

  // make and extract range to doc fragment 
  // for all contents of original div
  var range = document.createRange(); 
  range.setStartBefore(rem.firstChild);
  range.setEndAfter(rem.lastChild);
  var documentFragment = range.extractContents();

  // append doc fragment to clone
  // insert clone and remove old div
  rem2.appendChild(documentFragment);
  document.body.insertBefore(rem2, rem);
  rem.remove();
}, 5000);

Heading

paragraph bold stuff

21
задан Chris 21 October 2008 в 01:34
поделиться

6 ответов

Добавить к ответу Robert Elwell:

  • стемминг и сворачивание словоформ. Простой метод на английском языке состоит в том, чтобы использовать Носильщик, Происходящий на печатавших строчными литерами словоформах.
  • термин для "общих слов" является "стоп-словом" или "стоп-листом"
  • , Прочтение книги NLTK, как предложено объяснит много этих вводных проблем хорошо.
  • некоторые проблемы, которыми необходимо заняться, разбирают предложения (так, чтобы биграммы и n-граммные фразы не пересекали границы предложения), разделяя предложения на маркеры, и решая, что сделать о притяжательных формах, например.

Ни один из этого материала не ясен, и при этом любой из него не имеет "корректных ответов". См. также "nlp" и "естественный язык" ТАК теги.

Удачи! Это - нетривиальный проект.

5
ответ дан 29 November 2019 в 21:44
поделиться

Одна опция для того, что Вы делаете, является частотностью термина к обратной частоте документа или tf-idf. Сильные выражения будут иметь самое высокое взвешивание при этом вычислении. Проверьте если здесь: http://en.wikipedia.org/wiki/Tf-idf

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

До инструментов, чтобы сделать это, лучший инструмент для запуска с был бы NLTK, библиотекой Python с обширной документацией и учебными руководствами: http://nltk.sourceforge.net/

Для Java, попробуйте OpenNLP: http://opennlp.sourceforge.net/

Для материала фразы, рассмотрите вторую возможность, которую я предложил при помощи биграмм и триграмм как функции, или как раз когда условия в tf-idf.

Удачи!

17
ответ дан 29 November 2019 в 21:44
поделиться

Вы могли использовать Windows Indexing Service, который идет с SDK платформы Windows. Или, просто считайте следующее введение для получения обзора обработки естественного языка.

http://msdn.microsoft.com/en-us/library/ms693179 (По сравнению с 85) .aspx http://i.msdn.microsoft.com/ms693179.wbr-index-create (en-us, По сравнению с 85) .gif

http://i.msdn.microsoft.com/ms693179.wbr-query-process (en-us, По сравнению с 85) .gif

1
ответ дан 29 November 2019 в 21:44
поделиться

Хорошо. Итак, у вас есть документ, содержащий текст и набор документов (корпус). Есть несколько способов сделать это.

Я бы предложил использовать движок Lucene (Java) для индексации ваших документов. Lucene поддерживает структуру данных (индекс), в которой хранится ряд документов. Сам документ - это структура данных, которая может содержать «поля» - например, автора, заголовок, текст и т. Д. Вы можете выбрать, какие поля индексируются, а какие нет.

Добавление документов в индекс тривиальное . Lucene также создан для скорости и может превосходно масштабироваться.

Затем вы хотите выяснить условия и частоты. Поскольку lucene уже вычислил это для вас в процессе индексации, вы можете использовать функцию docFreq и построить свою собственную функцию частоты термина, или используйте функцию getTermFreqVectors класса IndexReader, чтобы получить термины (и их частоту).

Теперь вам решать, как их сортировать и какие критерии вы хотите использовать для фильтрации нужных слов. Чтобы выяснить отношения, вы можете использовать Java API для библиотеки с открытым исходным кодом wordnet. Чтобы ограничить слова, используйте класс Lucene PorterStemFilter. С частью важности фразы сложнее, но как только вы дойдете до этого - вы можете поискать советы о том, как интегрировать поиск по n-граммам в Lucene (подсказка) .

Удачи!

используйте класс Lucene PorterStemFilter. С частью важности фразы сложнее, но как только вы дойдете до этого - вы можете поискать советы о том, как интегрировать поиск по n-граммам в Lucene (подсказка) .

Удачи!

используйте класс Lucene PorterStemFilter. С частью важности фразы сложнее, но как только вы дойдете до этого - вы можете поискать советы о том, как интегрировать поиск по n-граммам в Lucene (подсказка) .

Удачи!

1
ответ дан 29 November 2019 в 21:44
поделиться

Проверьте модель MapReduce, чтобы получить количество слов, а затем определите частоту, как описано в tf-idf

Hadoop - это инфраструктура Apache MapReduce, которую можно использовать для тяжелой задачи подсчета слов во многих документах. http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

Вы не можете получить единую структуру, которая решила бы все, что вы хотите. Вы должны выбрать правильную комбинацию концепций и структуры, чтобы получить то, что вы хотите.

0
ответ дан 29 November 2019 в 21:44
поделиться

. Я также хотел бы посмотреть, есть ли способ идентифицировать важные фразы. (Вместо подсчета слов, количество слов в фразе составляет 2–3 слова)

Эта часть вашей проблемы называется извлечением словосочетаний . (По крайней мере, если принять «важные фразы» за фразы, которые встречаются значительно чаще, чем случайно.

0
ответ дан 29 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: