将文本拆分为单词&支持unicode的数字(preg_split)


Split text into words & numbers with unicode support (preg_split)

我试图分割(与preg_split)文本与许多外国字符和数字成长度>= 2的单词和数字,没有标点符号。现在我有了这段代码,但它只分成单词,而不考虑数字和长度>= 2。请问我能做些什么?

$text = 'abc 文 字化け, efg Yukarda mavi gök, asağıda yağız yer yaratıldıkta; (1998 m. siejės 7 d.). Ton pate dėina bandomkojė бойынша бірінші орында тұр (79.65 %), айына 41';
$splitted = preg_split('#'P{L}+#u', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

预期结果应为:array('abc', '字化け', 'efg', 'Yukarda', 'mavi', 'gök', 'asağıda', 'yağız', 'yer', 'yaratıldıkta', '1998', 'siejės', 'Ton', 'pate', 'dėina', 'bandomkojė', 'бойынша', 'бірінші', 'орында', 'тұр', '79.65', 'айына', '41');

注意:已经尝试了这些文档link1 &Link2,但我不能得到它的工作:-/

使用preg_match_all来代替,然后您可以检查长度条件(这在preg_split中很难做到,但并非不可能):

$text = 'abc 文 字化け, efg Yukarda mavi gök, asağıda yağız yer yaratıldıkta; (1998 m. siejės 7 d.). Ton pate dėina bandomkojė бойынша бірінші орында тұр (79.65 %), айына 41';
preg_match_all('~'p{L}{2,}+|'d{2,}+(?>'.'d++)?|'d'.'d++~u',$text,$matches);
print_r($matches);

解释:

   p{L}{2,}+          # letter 2 or more times
|                  # OR
   'd{2,}+            # digit 2 or more times
   (?>'.'d++)?        # can be a decimal number
|                  # OR
   'd'.'d++           # single digit MUST be followed by at least a decimal 
                      # (length constraint)

在只匹配作为单词一部分的数字之前,使用一个小技巧匹配以点分隔的数字:

preg_match_all("#(?:'d+'.'d+|'w{2,})#u", $text, $matches);
$splitted = $matches[0];

http://codepad.viper - 7. - com/x7ln1v

将CJK拆分为"words"是没有意义的。每个字符是一个单词。如果您使用空格,则可以将您分成短语。

所以这取决于你真正想要完成什么。如果对文本进行索引,则需要考虑双字母和/或CJK习语。