【问题标题】:Best way to replace strings替换字符串的最佳方法
【发布时间】:2011-10-16 02:07:35
【问题描述】:

我有一个数组,用于存储坏字符串和好字符串对。 例如:

array(
"Man. United"=>"Manchester United",
"Bay. Munchen"=>"Bayern Munchen",
"Bay. Munich"=>"Bayern Munchen",
...
) 

所以在这种情况下,我使用strtr 替换给定的字符串,但在这种情况下,我总是必须从数组中添加或删除数据。有没有办法将好名称存储在一个数组中并替换非常相似的名称?对我来说,用好名字建立数组要容易得多。

【问题讨论】:

  • 致潜在回答者:SuperMan. United 不应匹配。
  • 所以基本上你想要的是一个拼写检查器,对吧?我认为没有现成的解决方案可供您使用,但您也许可以找到一些有关拼写检查器如何构建和使用的信息。但当然,拼写检查器也以经常犯错误而闻名,所以这很棘手。

标签: php arrays replace


【解决方案1】:

您可以使用similar_text 或另请参阅部分中提到的其他功能之一尝试自动更正它们,但不会像您自己列出拼写错误那样准确.

*edit: levenshtein 也可能是一个不错的尝试...

Levenshtein 距离定义为 您必须替换、插入或删除以转换 str1 的字符 进入str2。

【讨论】:

  • 这个函数的效率如何,因为每 5 分钟我有 5000 个字符串?
  • Levenshtein distance 是一个很好的工具,但它也非常“中性”,因为它并不能真正告诉你两个字符串之间是否有任何相似之处。所以比较“apples”和“oranges”会给你一个 Levenshtein 5 分,这意味着……一些东西。关键是您需要进行大量其他相似性检查,然后 Levenshtein 可以帮助选择最佳匹配。此外,以“Man.U”->“Manchester United”为例,Levenshtein 的得分会很糟糕,因为这两个字符串几乎没有共同点。
  • 我尝试了这个解决方案,但它的工作速度非常慢,在 1000 个字符串替换中 +20 秒。我正在寻找更快的解决方案。有没有人工解决方案?
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多