【问题标题】:How can I generate all the wrong variants of words consisting of more than two letters?如何生成包含两个以上字母的单词的所有错误变体?
【发布时间】:2017-10-03 17:06:55
【问题描述】:

有一个数组,其中有数百万个单词。并且您需要创建一个关联数组,其中包含所有这些单词的错误变体,并将该单词的正确版本作为键。并且单词的错误变体不能与数组中的正确单词重合。而且,所有错误的单词变体也不应该彼此重合。所有这些生成的不正确的单词变体我需要纠正不正确的西里尔字母(不是俄语单词,也不是英语)。例如,以“apple”和“lost”这两个词为例。 带有正确单词的数组,用于创建不正确的变体:

<?php
$correct_words = array(
   "apple",
   "lost",
   "lot",
   "microsoft"
); 
?>

我希望结果是这样的:

<?php
$incorrect_variant_words = array(
    "aple"=>"apple",
    "lst"=>"lost",
    "lt"=>"lot",
    "microsot"=>"microsoft",
    "microsft"=>"microsoft",
    "microoft"=>"microsoft",
    "micrsoft"=>"microsoft",
    "micosoft"=>"microsoft",
    "mirosoft"=>"microsoft",
    "mcrosoft"=>"microsoft"
);
?>

我想更正不正确的单词。给建议或者有这个任务的解决方案,请告诉我。例如在谷歌翻译器中实现了这样的功能。如何在没有 Pspell 的 php 扩展的情况下解决这个问题。请帮助我解决如此艰巨的任务。为了用作正确的单词,我还添加了一个具有正确值的单词数组。

<?php

$array = array(

  "миёнаҳои",
  "луғатҳои",
  "онандроҷ",
  "ганҷинаи",
  "ҷамъиятӣ",
  "иҷтимоии",
  "муҳаммад",
  "рӯзмарра",
  "ҳамзабон",
  "забонҳои",
  "ҳамчунин",
  "фарҳанге",
  "феҳристи",
  "зардуштӣ",
  "таркибҳо",
  "ибораҳои",
  "калимаҳо",
  "фарҳанги",
  "тобишҳои",
  "намунаҳо",
  "нусхаҳои",
  "фирдавсӣ",
  "ҳуруфоти",
  "мутобиқи",
  "тақрибан",
  "алоҳидаи",
  "тоисломӣ",
  "паҳлавик",
  "классикӣ",
  "мӯътабар",
  "қадамҳои",
  "баргаҳои"

);

?>

提前谢谢你

【问题讨论】:

  • 为什么“apple”只有一种变体,而微软只有7种?
  • 那么“list”这个词也会有“lst”作为变体吗?你如何区分它们?
  • 我忘记了苹果值“appe”“ale”。是的,您在单词“list”中的正确性可能是不正确的变体“lst”。在我自己不知道这些错误之前该怎么做

标签: php arrays string similarity soundex


【解决方案1】:

使用similar_text 遍历正确单词的数组并将它们与输入值进行比较。返回匹配百分比最高的单词。基本概念:

$correct_words = array(
   "apple",
   "lost",
   "lot",
   "microsoft"
);
$input = 'lst';
$match = 0;
foreach ($correct_words as $correct) {
similar_text($correct, $input, $percent);
    if ($percent > $match) {
        $result = $correct;
        $match = $percent;
    }
}
echo $result;

输出丢失

编辑以添加查询结果

$correct_words = array(
   "тоҷик",
   "тоҷикӣ",
   "тоҷики"
);
$input = array("тоҷикӣ", "тоҷики", "точик", "точикӣ", "точики", "тоики", "тоикӣ", "тоҷӣкӣ", "тҷикӣ", "тчики", "тҷӣкӣ", "тчик");
foreach ($input as $in) {
$match = 0;
    foreach ($correct_words as $correct) {
similar_text($correct, $in, $percent);
    if ($percent > $match) {
        $result = $correct;
        $match = $percent;
    }
}
echo "$in is corrected to $result\r\n";
}

结果是:

тоҷикӣ is corrected to тоҷикӣ
тоҷики is corrected to тоҷики
точик is corrected to тоҷик
точикӣ is corrected to тоҷикӣ
точики is corrected to тоҷики
тоики is corrected to тоҷики
тоикӣ is corrected to тоҷикӣ
тоҷӣкӣ is corrected to тоҷикӣ
тҷикӣ is corrected to тоҷикӣ
тчики is corrected to тоҷики
тҷӣкӣ is corrected to тоҷикӣ
тчик is corrected to тоҷик

【讨论】:

  • 如果 3 个词非常相似怎么办。例如,正确的形式有“тоҷики”“тоҷикӣ”“тоҷик”三个单词。如果在不正确的版本中输入了这些单词,则该规则也可以正常工作
  • 给我一些不正确的条目来尝试,我会运行它们并告诉你它吐出什么
  • тоҷикӣ тоҷики точик точикӣ точики тоики тоикӣ тоҷӣкӣ тҷикӣ тчики тҷӣкӣ тчик
  • 如何更正文字? $文本= “тоҷикӣманбамарстоҷикиболахзаиточикдарёфткардаточикӣзадабаточикиназдиӯтоикионҳотоикӣбисёрдавадтоҷӣкӣшумототҷикӣбаназдитчикимопешитҷӣкӣназаркунедтчикточикотоҷико”; 跨度>
  • 用您列表中的输出更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多