从文本块中提取相关标记/关键字

sgo*_*mez 9 javascript php tags stop-words

我想要一个特定的实现,以便用户提供一个文本块,如:

"要求 - 使用Linux,Apache 2,MySQL 5和PHP 5的LAMP环境的工作知识, - Web 2.0标准的知识 - JSON的舒适性 - 使用框架,Zend,OOP的经验 - 跨浏览器Javascripting,JQuery等 - 更好地了解版本控制软件,例如子版本."

我想要做的是自动选择相关的关键字并创建标签/关键字,因此对于上面的文本,相关的标签应该是:mysql,php,json,jquery,版本控制,oop,web2.0,javascript

我怎样才能在PHP/Javascript等中做到这一点?一个headstart真的很有帮助.

Dar*_*ton 18

一个非常天真的方法是从文本中删除常见的停用词,为您留下更有意义的单词,如"标准","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));
Run Code Online (Sandbox Code Playgroud)

你可以看到这个,以及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
)
Run Code Online (Sandbox Code Playgroud)

所以,就像我说的那样,这有些天真,可以使用更多的优化(加上它很慢),但它确实从你的文本中提取了更相关的关键字.您还需要对停用词进行一些微调.捕获类似的术语Web 2.0将非常困难,所以我认为你最好使用像OpenCalais这样可以理解文本并返回实体和引用列表的认真服务.DocumentCloud依赖于此服务来从文档中收集信息.

此外,对于客户端实现,您可以使用JavaScript执行几乎相同的操作,并且可能更清晰(尽管对于客户端来说可能会很慢).

  • 我想我那时为你做了功课.瘸. (2认同)

小智 5

今天早上我对这些进行了快速回顾,令我惊讶的是,用我的测试短语表现最好的是用PHP编写的

看起来像最专业的人表现得非常糟糕:viewer.opencalais.com

其他好的人(不知道他们写的是什么语言)

  • www.nactem.ac.uk/software/termine/#form
  • www.alchemyapi.com/api/keyword/


Dmi*_*tri 2

这并不容易做到,因为它需要某种类型的模糊逻辑。您应该使用雅虎术语提取器 YQL

检查一下:链接