Извлечь соответствующие теги / ключевые слова из текстового блока - PullRequest
9 голосов
/ 28 января 2011

Я хотел конкретную реализацию, такую, чтобы пользователь предоставлял блок текста, такой как:

"Требования - Рабочие знания, в среде LAMP с использованием Linux, Apache 2, MySQL 5 и PHP 5,- Знание стандартов Web 2.0 - Удобство работы с JSON - Практический опыт работы с Frameworks, Zend, OOPs - Кросс-браузерная Javascripting, JQuery и т. Д. - Знание программного обеспечения для контроля версий, такого как под-версия, будет предпочтительным. "1005 *

То, что я хочу сделать, - это автоматически выбирать релевантные ключевые слова и создавать теги / ключевые слова, поэтому для вышеупомянутого фрагмента текста соответствующие теги должны быть: mysql, php, json, jquery, контроль версий, oop,web2.0, javascript

Как я могу сделать это в PHP / Javascript и т. д.?Headstart было бы очень полезно.

Ответы [ 4 ]

18 голосов
/ 28 января 2011

Очень наивный метод - удалить из текста общие стоп-слова , оставив вас с более значимыми словами, такими как «Стандарты», «JSON» и т. Д. Однако вы все равно получите много шума, поэтому Вы можете рассмотреть такую ​​услугу, как OpenCalais , которая может сделать довольно сложный анализ вашего текста.

Обновление:

Хорошо, ссылка в моем предыдущем ответе указала на реализации, но вы попросили один, так что простой здесь:

function stopWords($text, $stopwords) {

  // Remove line breaks and spaces from stopwords
    $stopwords = array_map(function($x){return trim(strtolower($x));}, $stopwords);

  // Replace all non-word chars with comma
  $pattern = '/[0-9\W]/';
  $text = preg_replace($pattern, ',', $text);

  // Create an array from $text
  $text_array = explode(",",$text);

  // remove whitespace and lowercase words in $text
  $text_array = array_map(function($x){return trim(strtolower($x));}, $text_array);

  foreach ($text_array as $term) {
    if (!in_array($term, $stopwords)) {
      $keywords[] = $term;
    }
  };

  return array_filter($keywords);
}

$stopwords = file('stop_words.txt');
$text = "Requirements - Working knowledge, on LAMP Environment using Linux, Apache 2, MySQL 5 and PHP 5, - Knowledge of Web 2.0 Standards - Comfortable with JSON - Hands on Experience on working with Frameworks, Zend, OOPs - Cross Browser Javascripting, JQuery etc. - Knowledge of Version Control Software such as sub-version will be preferable.";

print_r(stopWords($text, $stopwords));

Вы можете видеть это и содержание stop_word.txt в этом Суть .

Выполнение вышеприведенного примера вашего текста приводит к следующему массиву:

Array
(
    [0] => requirements
    [4] => linux
    [6] => apache
    [10] => mysql
    [13] => php
    [25] => json
    [28] => frameworks
    [30] => zend
    [34] => browser
    [35] => javascripting
    [37] => jquery
    [38] => etc
    [42] => software
    [43] => preferable
)

Итак, как я уже сказал, это несколько наивно и может потребовать большей оптимизации (плюс она медленная), но она вытягивает более релевантные ключевые слова из вашего текста. Вам также нужно будет немного подстроиться под стоп-слова. Захватывать такие термины, как Web 2.0, будет очень сложно, поэтому, опять же, я думаю, вам было бы лучше использовать серьезный сервис, такой как OpenCalais, который может понимать текст и возвращать список сущностей и ссылок. DocumentCloud использует этот самый сервис для сбора информации из документов.

Кроме того, для реализации на стороне клиента вы можете сделать почти то же самое с JavaScript, и, возможно, намного чище (хотя это может быть медленным для клиента.)

5 голосов
/ 23 мая 2013

Этим утром я сделал краткий обзор, и, к моему удивлению, лучше всего справился с моей тестовой фразой, написанной на PHP

То, что выглядело самым профессиональным, показало ужасное поведение: viewer.opencalais.com

Другие, которые были в порядке, были (не уверены, на каком языке они написаны)

  • www.nactem.ac.uk / software / termine / # form
  • www.alchemyapi.com / api / keyword /
2 голосов
/ 28 января 2011

Это нелегко сделать, потому что для этого требуется нечеткая логика.Вы должны использовать Yahoo Term Extractor YQL

Проверьте это: ссылка

0 голосов
/ 28 января 2011

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

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

Я могу порекомендовать реализацию клиентского javascript, если вы можете предоставить более подробную информацию.Если вы хотите в общем «знать» ключевые слова, тогда необходимо какое-то умное решение

Если у вас есть список ключевых слов, то вы можете использовать регулярные выражения для извлечения данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...