我正在尝试使用正则表达式在日语句子中匹配汉字化合物。
现在,我正在使用/ ((.)*) /
来匹配空格分隔的化合物,例如彼はそこに ひと人 でいた。
问题是,在某些句子中,单词是在开头,或者后跟一个标点字符。防爆。 いっ瞬 の間が生まれた。
或一昨じつ、彼らはそこを出発した。
我尝试了/ ((.)*) |^((.)*) | ((.)*)、 etc.
之类的内容,但这与彼はそこに ひと人
ひと人
代替彼はそこに ひと人 でいた。
相匹配
有没有办法将所有这些打包在一个正则表达式中,或者我是否必须使用一个,检查它是否返回任何内容,然后再尝试另一个?
谢谢!
P.S。:我正在使用PHP来解析句子。
答案 0 :(得分:1)
我认为:/([^ 、]+)/
应与您给出的示例中的单词相匹配(您可能希望在空格中添加一些其他单词终止字符,如果您在文本中有这些字符(或使用{ {1}}代替\pL
来覆盖所有UTF字母。
示例强>
[^ 、]
输出
<?
preg_match_all('/[^ 、]+/u', "彼らは日本の 国民 となった。", $m);
print_r($m);
答案 1 :(得分:1)
假设您的输入是UTF-8,您可以尝试使用
'/(\pL+)/u'
\pL+
匹配字符串中的一个或多个字母。
示例:
$str = '彼はそこに ひと人 でいた。';
preg_match_all('/(\pL+)/u', $str, $matches);
var_dump($matches[0]);
输出:
array(3) {
[0]=>
string(15) "彼はそこに"
[1]=>
string(9) "ひと人"
[2]=>
string(9) "でいた"
}
答案 2 :(得分:0)
你只是想根据某种模式(空格或标点符号)拆分你的字符串,这是真的吗? 那这个呢?
In [51]: word = '.test test\n.test'
In [53]: re.split('[\s,.]+',word)
Out[53]: ['', 'test', 'test', 'test']
答案 3 :(得分:0)
在考虑了很长一段时间后,我相信没有办法解析化合物而不用空格或任何其他字符来区分它们,这就是我现在正在做的事情:)
实施例。如果句子是私は ノート、ペンなどが必要だ。
,则计算机无法知道它是私は
(开始句子和空格分隔)还是ノート
(空格和逗号分隔)是它应该选择。
感谢大家的建议......