我知道我可以使用A-Za-z0-9正则表达式提取英文字母和数字。
我如何从其他语言中提取单词,并且只允许字母和数字出现在他们的脚本中,而不允许其他内容?
我使用的一种方法是从文本中过滤掉我不想要的所有内容,然后只剩下我想要的单词,但是这种方法占用了大量的CPU时间,并且在大规模应用程序中效率不高。
现在我想知道还有什么其他的方法在使用,或者有人知道可以用来分析其他语言的文本。
如何从汉语、日语等甚至不在单词之间使用空格的语言中提取单词?我用来区分单词的一种方法是将样式和换行符视为一种方法,以认识到它们肯定是不同的作品,但当人们不使用大量的换行符或格式来分隔不同的单词时,这种方法有时可能不可靠。
因此,总而言之,如何使用正则表达式分析其他语言?
发布于 2011-08-10 07:37:13
通常,正则表达式的功能不足以在不使用分隔符(如空格)的语言中提取单词。
要从中文中提取单词,您需要一个包含已知单词的大型字典,并根据已知单词对句子进行划分,以便使用更长的字典条目(因为每个字符本身都是一个有效单词)。
要从日语中提取单词,这取决于写作风格。如果文本完全是假名,那么使用上面提到的字典方法。如果文本是汉字和假名的标准混合,那么您至少可以知道,每次从假名到汉字的转换几乎肯定是一个新词的开始。
发布于 2011-08-10 08:09:29
假设我们手头有一本汉语词典,我们想要拆分一个短语,如下所示:中國是位於亞洲東部的一個廣大地域或國度
一种方法是从左侧扫描,在字典中仍有单词的情况下尽可能多地抓取字母。然后我们向前移动那么多个字母并重复。这种方法被称为贪婪方法,它将给我们提供这样的短语:中國位於東部一廣大或
这并不是唯一的方法,因为有时最好的分裂并不是贪婪的。例如,如果我们有字典{ A,B,C,D,AB,BCD}和文本ABCD,那么我们可以将文本拆分为ABD或A。
方便的是,这个网页可以在实践中演示单词拆分:http://www.mdbg.net/chindict/chindict.php
发布于 2011-08-10 07:39:13
如果您只想按字符过滤,而不是某些高阶语言结构,那么您可以对大多数语言执行完全相同的操作--您只需要一个支持Unicode的正则表达式库。您可以找到列表here并根据这些范围进行过滤。
https://stackoverflow.com/questions/7004278
复制相似问题