我想要一个特定的实现,以便用户提供一个文本块,如:
“要求 - 使用Linux,Apache 2的LAMP环境的工作知识, MySQL 5和PHP 5, - 了解Web 2.0标准 - JSON舒适 - 亲身体验使用Frameworks,Zend,OOP的经验 - 跨浏览器Javascripting,JQuery等 - 版本控制软件的知识,如子版本将 优选“。
我想要做的是自动选择相关的关键字并创建标签/关键字,因此对于上述文本,相关的标签应该是: mysql,php,json,jquery,版本控制,oop,web2。 0,javascript
如何在PHP / Javascript等中进行操作?一个headstart真的很有帮助。
答案 0 :(得分:18)
一种非常天真的方法是从文本中删除常见的stopwords,为您留下更多有意义的词语,如“标准”,“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));
您可以在此Gist中看到此内容以及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执行相同的操作,并且可能更清晰(尽管对于客户端来说可能会很慢。)
答案 1 :(得分:5)
今天早上我对这些进行了快速回顾,令我惊讶的是,我的测试用语表现最好用PHP编写
看起来像最专业的人表现得非常糟糕:viewer.opencalais.com
其他好的人(不确定他们写的是什么语言)
答案 2 :(得分:2)
这不容易做到,因为它需要某种类型的模糊逻辑。您应该使用Yahoo Term提取器YQL
检查出来:link
答案 3 :(得分:0)
根据您是否要显示客户关键字/标签或是否要从文本块中提取关键字/标签,然后使用它们进行进一步计算。
如果您只需要显示它们,那么客户端处理就可以了。如果您需要它们进行进一步计算,请使用服务器端处理它。
如果您可以提供更多详细信息,我可以推荐javascript客户端实现。如果你想要一般“知道”关键词,那么某种聪明的解决方案是必要的
如果您有关键字列表,则可以使用regular expressions提取数据