Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 单词之间没有空格的语言中的断字(例如,亚洲语)?_Php_Full Text Search_Tokenize_Cjk_Wordbreaker - Fatal编程技术网

Php 单词之间没有空格的语言中的断字(例如,亚洲语)?

Php 单词之间没有空格的语言中的断字(例如,亚洲语)?,php,full-text-search,tokenize,cjk,wordbreaker,Php,Full Text Search,Tokenize,Cjk,Wordbreaker,我想让MySQL全文搜索与日语和中文文本,以及任何其他语言的工作。问题是这些语言和其他语言之间通常没有空格。当您必须键入与文本中相同的句子时,搜索没有用处 我不能只在每个字符之间留一个空格,因为英语也必须起作用。我想用PHP或MySQL解决这个问题 我可以配置MySQL来识别字符,这些字符应该是它们自己的索引单元吗?是否有一个PHP模块可以识别这些字符,这样我就可以在它们周围加空格作为索引 更新 部分解决方案: $string_with_spaces = preg_replace( "/["

我想让MySQL全文搜索与日语和中文文本,以及任何其他语言的工作。问题是这些语言和其他语言之间通常没有空格。当您必须键入与文本中相同的句子时,搜索没有用处

我不能只在每个字符之间留一个空格,因为英语也必须起作用。我想用PHP或MySQL解决这个问题

我可以配置MySQL来识别字符,这些字符应该是它们自己的索引单元吗?是否有一个PHP模块可以识别这些字符,这样我就可以在它们周围加空格作为索引

更新

部分解决方案:

$string_with_spaces =
  preg_replace( "/[".json_decode('"\u4e00"')."-".json_decode('"\uface"')."]/",
  " $0 ", $string_without_spaces );
这使得角色类至少由我需要特别处理的一些角色组成。我可能应该提到,咀嚼索引文本是可以接受的

有人知道我需要在周围插入空格的所有字符范围吗


另外,必须有一种更好的、可移植的方法来在PHP中表示这些字符?文字Unicode的源代码并不理想;我不会认出所有的人物;它们可能不会在我必须使用的所有机器上呈现。

上述语言的分词需要一种语言方法,例如使用词典以及理解基本词干规则的方法

我听说过一些比较成功的全文搜索应用程序,它们简单地将每个字符分割成一个单独的中文单词,简单地应用最终用户提供的搜索条件的相同“标记化”。然后,搜索引擎为文档提供更好的排名,这些文档按照与搜索条件相同的顺序提供字符和单词。 我不确定这是否可以扩展到日语等语言,因为平假名和片假名字符集使文本更类似于带有短字母表的欧洲语言

编辑
资源
这个断字问题,以及相关的问题,是如此的非同小可,以至于整本书都在谈论它。例如,请参阅(CJKV代表中文、日文、韩文和越南文;您也可以使用CJK关键字,因为在许多文本中,不讨论越南语)。有关此主题的单页资料,请参见。
可以理解的是,涉及这一主题的大部分材料都是用一种基本的母语编写的,因此,对于那些对这些语言不太熟练的人来说,使用有限。因此,为了帮助您在开始实现分词逻辑后验证搜索引擎,您应该寻求一两位母语人士的帮助

各种想法
你的识别系统性地暗示分词的字符(比如引号、括号、连字符等)的想法很好,这可能是一些专业级分词员使用的一种启发式方法。然而,你应该为这样一份清单寻找权威性的来源,而不是根据轶事调查结果从零开始收集。
一个相关的想法是在假名到汉字的转换中打断单词(但我猜不是相反),也可能在平假名到片假名的转换中打断单词,或者反之亦然。
与分词无关,索引可能[-也可能不-;-)]受益于系统地将每个(比如)平假名字符转换为相应的片假名字符。只是一个没有受过教育的想法!我对日语了解不够,不知道这是否有帮助;直观地说,它与重音字母的系统化转换,以及与相应的非重音字母的系统化转换,大致相似,就像几种欧洲语言所使用的那样。

也许我前面提到的对单个字符进行系统索引(以及根据搜索结果与搜索条件的接近顺序对搜索结果进行排序)的想法可以稍微改变,例如,将连续的假名字符放在一起,然后再使用一些其他规则。。。并产生一个不完善但足够实用的搜索引擎

如果不是这样,不要失望。。。如前所述,这绝非小事,从长远来看,暂停一下,读一两本书,可能会为你节省时间和金钱。尝试学习更多“理论”和最佳实践的另一个原因是,目前你似乎专注于词干分析,但很快,搜索引擎也会从词干识别中受益;事实上,这两个问题至少在语言上是相关的,并且可以通过同时处理而受益


祝您在这项令人烦恼但值得努力的工作中好运。

一年后,您可能不再需要这项工作,但下页的代码可能会对您希望(ed)做的事情提供一些提示:

如果你有任何进展后,上述职位在你自己的搜索我相信其他人会有兴趣知道

(经过编辑,这里有一个更好的答案:
)

我完全可以接受将复合词分开。我只需要知道什么时候分割符号。请参阅我即将更新的部分解决方案。@Joe:不客气。我碰巧对语言学和NLP感兴趣,但对CJK语言的知识非常非常少。请阅读我的编辑,因为我添加了一些关键字和在线参考,这可能有助于您的任务。好运:-)事实证明,在我的问题更新中识别示例中的字符范围解决了迄今为止出现的所有情况下的问题。至少,我们的少数用户对此感到满意。我期待着有一天这个解决方案不再足够,我可以更完整、更有趣地解决这个问题