10

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

“要求 - 工作知识,使用 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 等来做呢?抢先一步真的很有帮助。

4

4 回答 4

20

一个非常幼稚的方法是从文本中删除常见的停用词,留下更有意义的词,如“标准”、“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这个Gist中的内容。

在您的示例文本上运行上述代码会生成以下数组:

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 做几乎相同的事情,并且可能更干净(尽管它可能对客户端来说很慢。)

于 2011-01-28T13:06:47.280 回答
5

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

看起来最专业的表演非常小:viewer.opencalais.com

其他没问题的(不确定他们用什么语言写的)

  • www.nactem.ac.uk/software/termine/#form
  • www.alchemyapi.com/api/keyword/
于 2013-05-23T08:06:40.630 回答
2

这并不容易做到,因为它需要某种类型的模糊逻辑。你应该使用 Yahoo Term extractor YQL

看看:链接

于 2011-01-28T12:29:49.203 回答
0

根据您是要显示客户端关键字/标签还是要从文本块中提取关键字/标签,然后对它们进行进一步计算。

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

如果您可以提供更多详细信息,我可以推荐一个 javascript 客户端实现。如果您想一般地“了解”关键字,则需要某种巧妙的解决方案

如果您有关键字列表,则可以使用正则表达式来提取数据

于 2011-01-28T12:34:07.850 回答