关于如何获取单词字符串的每个同义词变体的建议



所以我有一个字符串

$string = "funny cat fighting";

我有一个 2d 同义词数组,例如:

$arr = array (
  0 => 
  array (
    0 => 'cat',
    1 => 'tabby',
    2 => 'kitty',
    3 => 'puss'
  ),
  1 => 
  array (
    0 => 'funny',
    1 => 'haha',
    2 => 'lol'
  ),
  2 => 
  array (
    0 => 'war',
    1 => 'fighting'
  )
)

我将如何获取$string "funny cat fighting"的每个可能的同义词变体,例如,我希望输出是一个字符串数组:

funny cat fighting
haha cat fighting
lol cat fighting
funny tabby fighting

。所有变体

假设有几件事:

  • 不会寻找每个单词的每个排列,因此使用匹配的字符串毫无意义。
  • 数组的结构略有错误,因为cat在第一个数组中,funny在第二个数组中。

好的,所以通过对数组进行一些调整,它可以很容易地像下面这样完成,我补充说,如果单词不在数组中,那么它保持不变:

<?php
$arr = array (
  0 => 
  array (
    0 => 'funny',
    1 => 'haha',
    2 => 'lol'
  ),
  1 => 
  array (
    0 => 'cat',
    1 => 'tabby',
    2 => 'kitty',
    3 => 'puss'
  ),
  2 => 
  array (
    0 => 'war',
    1 => 'fighting'
  )
);
$string = "funny cat fighting";
$words = explode(' ', $string, 3);
$result = [];
foreach ($arr[0] as $a) {
    if (!in_array($words[0], $arr[0])) {
        $a = $words[0];
    }
    foreach ($arr[1] as $b) {
        if (!in_array($words[1], $arr[1])) {
            $b = $words[1];
        }
        foreach ($arr[2] as $c) {
            if (!in_array($words[2], $arr[2])) {
                $c = $words[2];
            }
            if (!in_array($a.' '.$b.' '.$c, $result)) {
                $result[] = $a.' '.$b.' '.$c;
            }
        }
    } 
}
print_r($result);

结果:https://3v4l.org/7rEsh

Array
(
    [0] => funny cat war
    [1] => funny cat fighting
    [2] => funny tabby war
    [3] => funny tabby fighting
    [4] => funny kitty war
    [5] => funny kitty fighting
    [6] => funny puss war
    [7] => funny puss fighting
    [8] => haha cat war
    [9] => haha cat fighting
    [10] => haha tabby war
    [11] => haha tabby fighting
    [12] => haha kitty war
    [13] => haha kitty fighting
    [14] => haha puss war
    [15] => haha puss fighting
    [16] => lol cat war
    [17] => lol cat fighting
    [18] => lol tabby war
    [19] => lol tabby fighting
    [20] => lol kitty war
    [21] => lol kitty fighting
    [22] => lol puss war
    [23] => lol puss fighting
)

结果(使用 dog 而不是cat)https://3v4l.org/ICbZ6

Array
(
    [0] => funny dog war
    [1] => funny dog fighting
    [2] => haha dog war
    [3] => haha dog fighting
    [4] => lol dog war
    [5] => lol dog fighting
)

不要忘记在你的家庭作业中引用这个答案;p

最新更新