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

Php 从文本块中提取相关标记/关键字,php,javascript,tags,stop-words,Php,Javascript,Tags,Stop Words,我想要一个特定的实现,这样用户就可以提供如下文本块: 要求 -工作知识,在LAMP环境下使用Linux、Apache 2、, MySQL 5和PHP 5, -了解Web2.0标准 -熟悉JSON -使用框架、Zend和OOPs的实际操作经验 -跨浏览器Javascripting、JQuery等。 -熟悉版本控制软件,如子版本 更好 我想做的是自动选择相关关键字并创建标记/关键字,因此对于上面的文本,相关标记应该是:mysql、php、json、jquery、版本控制、oop、web2.0、jav

我想要一个特定的实现,这样用户就可以提供如下文本块:

要求 -工作知识,在LAMP环境下使用Linux、Apache 2、, MySQL 5和PHP 5, -了解Web2.0标准 -熟悉JSON -使用框架、Zend和OOPs的实际操作经验 -跨浏览器Javascripting、JQuery等。 -熟悉版本控制软件,如子版本 更好

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


我怎样才能在PHP/Javascript等语言中实现它?启动会非常有用。

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


检查它:

取决于是否要显示客户端关键字/标记,或者是否要从文本块中提取关键字/标记,然后使用它们进行进一步计算

如果您只需要显示它们,那么客户端处理就可以了。如果需要进一步计算,请使用服务器端处理

如果您能提供更多细节,我可以推荐javascript客户端实现。如果你想大致了解关键词,那么需要某种巧妙的解决方案


如果你有一个关键字列表,那么你可以用来提取数据

一个非常幼稚的方法是从文本中删除常见的词,留给你更多有意义的单词,比如“标准”、“JSON”等。但是,你仍然会得到很多的噪音,所以你可以考虑一个类似的服务,可以对你的文本做一个比较复杂的分析。 更新:

好的,我前面回答中的链接指向实现,但是您要求了一个,所以这里有一个简单的:

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
)
所以,就像我说的,这有点幼稚,可以使用更多的优化,加上它的速度很慢,但它确实会从你的文本中提取出更相关的关键字。您还需要对停止词进行一些微调。捕获像Web2.0这样的术语将非常困难,因此我再次认为您最好使用像OpenCalais这样的严肃服务,它可以理解文本并返回实体和引用列表。依靠这项服务从文档中收集信息


此外,对于客户端实现,您可以使用JavaScript执行几乎相同的操作,而且可能会更干净,尽管对客户端来说可能会很慢。

今天早上我快速回顾了这些操作,令我惊讶的是,我的测试短语中表现最好的一个是用PHP编写的

演示: 看起来最专业的网站:viewer.opencalais.com

其他还行的人不确定他们是用什么语言写的

www.nactem.ac.uk/software/termine/form www.alchemyapi.com/api/keyword/
谢谢你的链接,我正在寻找这样的东西。我尝试了YQL,但不知怎么的,它没有识别很多术语。找到了这个叫做Zemanta的网站,这是一个不错的网站,我正计划同时使用这两个网站并合并我的结果。这是我在互联网上发现的5年左右最棒的东西。。。。。。很不幸,thankslink已经死了,看起来雅虎已经放弃了这个功能。谢谢你的回复。你能推荐一个客户端实现吗?我想要的是,当用户填充一块文本时,它应该从中提取相关的标签。谢谢Darren。它确实很幼稚,但非常详尽,你能推荐一个实现吗,即使用preg_替换之类的东西或一些有效的匹配脚本?太好了!谢谢你的实施。这回答了你的问题吗?他的作业是我感兴趣的。你的回答很好。开放的加来看起来不错,但只有英语!!幸运的是,到代码的链接不再有效,代码似乎是付费的。我发现它基于Topia术语提取器的PHP端口: