我知道我可以使用A-Za-z0-9
正则表达式提取英文字母和数字。
如何从其他语言(如阿拉伯语)中提取单词,只允许其脚本中的字母和数字,而不是其他语言?
我使用的一种方法是从文本中过滤掉我不想要的所有内容然后我留下了正确的单词,但这种方法占用了大量的CPU时间,并且在大规模应用程序上效率不高。 / p>
现在我想知道还有哪些方法正在使用中,或者有人知道可以用来分析其他语言的文本。
如何从中文,日文等语言中提取哪些文字甚至不使用文字之间的空格?我用来区分单词的一种方法是将样式和换行符视为一种方法来实现它们必须是不同的作品,但是当人们不使用大量换行符或格式化来分离不同时,这种方法有时是不可靠的词语的
总而言之,如何使用正则表达式分析其他语言?
答案 0 :(得分:1)
通常,正则表达式不足以在不使用单词分隔符(例如空格)的语言中提取单词。
要从中文中提取单词,您需要一个包含已知单词的庞大字典,并根据已知单词对句子进行分区,从而支持较长的字典条目(因为每个字符本身都是一个有效单词)。
从日语中提取单词,取决于写作风格。如果文本完全是假名,那么使用上面提到的字典方法。如果文本是汉字和假名的标准混合,那么你至少可以知道每一个假名到汉字的过渡几乎肯定是一个新词的开头。
答案 1 :(得分:1)
假设我们手边有一本中文字典,我们想分割一个这样的短语:中国是位于亚洲东部的一个广大地域或国度
一种方法是从左侧扫描并尽可能多地抓取字母,同时在字典中仍然有一个单词。然后我们继续前进那么多字母并重复。这种称为贪婪方法的方法会让我们分享这句话:[中国] [是] [位于] [亚洲] [东部] [的] [一] [个] [广大] [地域] [或] [国度]
这不是唯一的方法,因为有时候最好的分裂并不是贪婪的。例如,如果我们有字典{A,B,C,D,AB,BCD}和文本ABCD,那么我们可以将文本拆分为[AB] [C] [D]或[A] [BCD] 。后者分裂可能优于前者。
方便地,此网页可以在实践中演示单词拆分:http://www.mdbg.net/chindict/chindict.php
答案 2 :(得分:0)
如果你只想按字符过滤而不是某些高阶语言结构,你可以用大多数语言做同样的事情 - 你只需要一个支持Unicode的正则表达式库。您可以找到列表here并根据这些范围进行过滤。
答案 3 :(得分:0)
正如[A-Za-z0-9]
可以用于英文文本(粗略地),因此[\p{Script=Arabic}0-9]
可以用于阿拉伯文本(粗略地)。