【发布时间】:2010-08-31 03:26:05
【问题描述】:
我正在寻找一种方法来获取没有空格的短语(例如 twitter 上的热门话题),并根据短语中的单词在适当的位置放置空格。大概与字典进行某种比较会起作用吗?
例如:我有一个函数接受短语“septemberwish”(Twitter 上的当前趋势),它会返回“september wish”。
【问题讨论】:
标签: php
我正在寻找一种方法来获取没有空格的短语(例如 twitter 上的热门话题),并根据短语中的单词在适当的位置放置空格。大概与字典进行某种比较会起作用吗?
例如:我有一个函数接受短语“septemberwish”(Twitter 上的当前趋势),它会返回“september wish”。
【问题讨论】:
标签: php
这会很棘手。您很容易得到模棱两可的单词合并,其中多次分离会产生有效的单词。
也就是说,您可以使用拼写检查器。请参阅pspell 扩展。
算法可以将单词分隔为不同的点,直到产生两个有效单词。示例:
septem berwish(在楼层拆分(长度/2);均无效) septemb erwish(在楼层分割(长度/2)+1;均无效) septe mberwish(在楼层拆分(长度/2)-1;均无效) septembe rwish(在楼层分割(长度/2)+2;均无效) sept emberwish(在楼层拆分(长度/2)-2;第一个有效,第二个无效) 九月愿望(在楼层分割(长度/2)+3;都有效;停止)对于两个以上的词,需要另一种方法。一种可能性是从末尾删除字符,直到您有一个有效的单词,然后对未匹配的其余部分执行相同操作:
九月愿望二(无效) septemberwishtw(无效) ... 九月(有效;获得第一名) 愿望二(无效) ... 希望(有效;得到第二个) 两个(有效;获得第三个)【讨论】:
在最简单的实现中,从字符串的开头开始添加字母,并与给定长度的字典进行比较:例如
s // no match
se // no match
sep // no match
...
september // match! add space, add to output
// continue where we left off
w // no match
wi // no match
wis // no match
wish // match! add space, add to output
end of string, terminate
棘手的一点是:可能有一些字符串可以被解析成各种短语(the-site-that-shall-not-be-named,例如)。实际上,你的例子就是一个(虽然一个词并不常见):
septemberwish vs septemberwish
我想您可以先尝试使用较小的常用词词典,或者先尝试最长的词;或者给不常用的词一个较低的权重。
【讨论】: