如何用PHP在无空间字符串中查找单词?

时间:2017-02-14 19:42:11

标签: php string

我有这样的字符串。

lasvegashotellosangelesrestaurant,...

喜欢字符串有“拉斯维加斯”,“酒店”,“洛杉矶”,“餐厅”等字样......

我应该从上面的字符串(lasvegashotellosangelesrestaurant)中找到单词。

最终目的是

{
'lasvegashotel'=>'LasVegasHotel',
'losangelesrestaurant'=>'LosAngelesRestaurant',
....
}

我不知道会输入什么词。

请帮我解决这个有趣的问题。

关键字是这些字符串不长。

2 个答案:

答案 0 :(得分:0)

所以你的意思是你有像#34; Las Vegas"并且你想用另外两个字符串转换它们,比如" lasvegas"和" LasVegas"。

要做到这一点,首先,我们需要使用函数str_replace删除字符串中的所有空格 然后,这会给我们一个这样的代码:
$basestr = "Las Vegas"; // This will be our base string $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value
然后,正如您所说,您需要一个没有空格的较低套管版本的字符串。 这一次,我们将使用另一个功能:strtolower

此函数基本上小写字符串的每个字符并返回它。所以最终的代码看起来像这样:
$basestr = "Las Vegas"; // This will be our base string $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value $key = strtolower($value); // Gets a lowercased version of $value

但是如果你想为每个字符串多次,那么创建一个像:

这样的函数

function getKeyAndValue($basestr) { $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value $key = strtolower($value); // Gets a lowercased version of $value return [$key => $value]; }
并为您想要获取的所有字符串调用此函数。

度过愉快的一天。

编辑:由于我对OP问题的误解,这应该是OP要求的答案:

所以我们仍然使用str_replace函数和strtolower函数,但方式不同。

答案很简单,我们用大写字母替换任何小写字。
在这里,我假设每个字符串只有一个单词(也就是没有单独的单词空格),如果不是这样的话,请查看我原来的答案中的处理方法。
foreach($wordList as $wordToCapitalize) { $basestr = str_replace(strtolower($wordToCapitalize), $wordToCapitalize); }

答案 1 :(得分:0)

对于该要求,没有可靠的,适合所有人的标记化解决方案。有一个非常好的讨论是斯坦福NLP非常聪明的人解决它的方法:

https://www.youtube.com/watch?v=jBk24DI8kg0&index=4&list=PL6397E4B26D00A269

基本上你需要一个你可以尝试匹配的单词字典,然后弹出字符串的前面。例如,在“lasvegashotel”中,你会有一本带有“las”,“vegas”,“hotel”的字典,或者如果你愿意的话,甚至可以将theram“lasvegas”结合起来。然后,您必须迭代搜索字符串,从源字符串的开头开始查找具有较长子串的匹配项。识别出一个令牌后,将其从源字符串中弹出,然后开始寻找下一个匹配。

这个解决方案的问题在于,“las”不仅会从“lasvegas”中获得标记,还会从“lastmanstanding”中获得标记。有解决方法,但没有银弹解决方案。