2011-09-05 49 views
1

我有一个网站,人们输入的单词列表。如何用任何可能的语言预先匹配一组单词?

这些单词列表可以用世界上任何语言编写。

如果我不知道他们输入什么语言,我如何才能从他们的输入数据中提取这些单词列表?

是否有某种比赛的所有国际字母符号我丢失的,还是我不得不手动编写了一套支架,将每一个可能的国际书信匹配吗?

this我所期待的,只是不知道它了吗?

+0

对于不使用明文分隔符的语言(如中文和日文),这实际上是不可能的:对于这些你需要*知道你正在处理什么语言并使用字典查找根据输入的单词数猜测*。 – deceze

+0

你可能是对的。看起来像这是一个大于我订购的蠕虫的大罐:/ – darkAsPitch

回答

3

您可以使用Unicode character properties,例如:

preg_match_all('#[\p{L}\p{Pc}]+#u', $str, $matches); 

[\p{L}\p{Pc}]+给你的信和连接符标点。你可以缩短到\pL+
无论哪种方式,您都希望更好地定义“单词”。这可能比一些字母序列更多...

+0

我找不到特定于PHP或PCRE的任何内容,但以下是关于此主题的良好阅读(以Java为中心):http://stackoverflow.com/questions/4304928/unicode-equivalent-for-w-and-b-in-java-regular-expressions – Kobi

+1

对于没有这些功能的脚本,这完全没有任何作用。请参阅deceze的评论。 – tripleee

+1

@tripleee - “什么也不做”根本就是错误的。 '\ pL'应该匹配每种语言的Unicode字母:http://ideone.com/8sbr9,并且在日语中匹配* letter *,而不是其他符号。正确地拆分单词*是一个完整的其他主题*,即使使用ASCII英文字母也不是一项简单的任务,因为它取决于上下文。 (例如,“狮子”,“先生”等)。 – Kobi

2

我的建议是定义自己的输入约定 - 迫使他们输入一次一个字,或在文本框中每行一个字。否则,您将需要为每个脚本分割算法(已授予,对于绝大多数脚本来说,这将是一件简单的事情,例如“分割具有Unicode字词分隔符属性的字符”,但其余特殊情况基本上仍然是开放的AI研究主题)。

相关问题