目前,我正在开发一个Web应用程序以获取Twitter流,并尝试自己创建自然语言处理。
由于我的数据来自Twitter(受140个字符限制),因此缩短了许多单词,在这种情况下, 省略了空格 。
例如:
"Hi, my name is Bob. I m 19yo and 170cm tall"
应该标记为:
- hi - my - name - bob - i - 19 - yo - 170 - cm - tall
请注意,19并yo在19yo有 没有空间 之间。我主要将其用于提取具有其单位的数字。
19
yo
19yo
简而言之,我需要的是一种通过数字或字母块( 没有 定界符)来“爆炸”其中具有数字的每个令牌的方法。
'123abc' 将会 ['123', 'abc']
'123abc'
['123', 'abc']
'abc123' 将会 ['abc', '123']
'abc123'
['abc', '123']
'abc123xyz' 将会 ['abc', '123', 'xyz']
'abc123xyz'
['abc', '123', 'xyz']
等等。
用PHP实现它的最佳方法是什么?
我找到了接近它的东西,但是它是C#,尤其是用于日/月拆分。
您可以使用preg_split
$string = "Hi, my name is Bob. I m 19yo and 170cm tall"; $parts = preg_split("/(,?\s+)|((?<=[a-z])(?=\d))|((?<=\d)(?=[a-z]))/i", $string); var_dump ($parts);
当与数字字母边界匹配时,正则表达式匹配必须为零宽度。字符本身不能包含在比赛中。为此,零宽环顾四周非常有用。
http://codepad.org/i4Y6r6VS