我正在尝试创建一个服务,用户将在其中输入一些文本数据,如博客文章或类似内容 我的服务将在其文本中替换一些“特殊单词”以获取链接。例如:
"...Pink Floyd were an English rock band that achieved international success with their progressive and psychedelic rock music..."
"...<a href="http://www.xxx.com?q=pink%20floyd">Pink Floyd</a> were an English <a href="http://www.xxx.com?q=rock%20band">rock band</a> that achieved international success with their progressive and psychedelic rock <a href="http://www.xxx.com?q=music">music<a/>..."
类似维基百科的内容!
通用算法似乎很简单:
但问题是,我在数据库中处理大约100万字。 我正在使用PHP和MySQL,据我所知,PHP可能不是文本处理的最佳工具。
我担心性能,取决于流量和请求的数量,这个algol可能非常慢......
我试图找到另外的工具或方法来解决这个问题,我发现了很多东西,但我认为当时没有一个是 适合工作的正确工具。 我发现mysql全文搜索,搜索lucene,sphinx,solr。如果我错了,请纠正我,但我认为他们不适合这种工具 搜索范围。
有人可以建议我如何正确处理这个问题。
需要考虑的事项:
- 不幸的是,文字是葡萄牙语“pt-br”,我认为这将是一个问题。
- 它需要获得完整的术语,在上面的例子中它将不得不采取“摇滚乐队”而不是分裂成“摇滚乐”和“乐队”。
- 我对其他编程语言没有更深入的了解,但如果是这种情况,我也会对其他技术开放!
醇>
答案 0 :(得分:1)
不要担心此问题的表现。
你可以随时:
也是在db:
中搜索停用词的代码示例...
$words = strip_tags($origin);
$words = strtolower($words);
// strip anything (symbols, numbers, etc), keep only words
...
$words = explode(' ', $words);
$found = DB::query(Database::SELECT, "SELECT url, word FROM `stop_words` WHERE word IN (".implode(',',$words).")")->execute()->as_array(); // Kohana framework Database module
$patterns = array();
$replacement = array();
foreach($found AS $row)
{
$patterns[] = '/('.$row['word'].')/i';
$replacement[] = '<a href="'.$row['url'].'">$1</a>';
}
$origin = preg_replace($patterns, $replacement, $origin);