一句话是什么?或者更好一个词是什么?到目前为止,我一直在使用字符组从文本中提取单词。原始文本在标记中,因此处理单词可能比标记它们更好。此外,使用单词避免了任何形式的标记,所以它更普遍。我正在使用本课文作为测试。在将文本添加到测试套件之前,我使用了这个regexp:
our $word_re = qr/([\w\'áéíóúÁÉÍÓÚñÑçÇüÜ]+)/
my ($stripped_word) = ( $w =~ $word_re );这对英语来说很管用,加上一些西班牙语单词。但后来我尝试了西班牙语,我不得不补充
($stripped_word) = ( $stripped_word =~ /([^¿!ªº\d]+)/ ); #Some Spanish sigils and digits注意左边的标点符号和更多的东西。一般的问题是,即使这对英语和西班牙语有效(到目前为止),这是一个黑客,它可能不适用于冰岛,捷克或达尔马提亚。因此,我测试了regexen,包括Unicode字符类,但结果是:
x ( "¿Más o menos?" =~ /(\p{Word}+)/g )
0 '¿'
1 'Má'
2 's'
3 'o'
4 'menos'正如你所看到的,标记为“单词”字符左边的问号,最让我困惑的是,"á“作为单词的结尾字符。当然,普通的\w也不会更好
x ( "¿Más o menos?" =~ /(\w+)/g )
0 'M'
1 's'
2 'o'
3 'menos'因此,最后一个问题是:是否有一个(最好是简短的) regex能够以(合理)数量的语言提取单词?或者最好的方法是首先使用您感兴趣的语言中的字符枚举来提取类似单词的东西,然后去掉那些实际上不是真正的字符的东西?
发布于 2014-08-12 08:52:44
按照perlunicode - Unicode字符属性中的定义,提取只包含任何语言使用的字母的单词:
\b\p{L}+\b如果单词中也包含数字,请使用:
\b[\p{L}\p{Nd}]+\b发布于 2014-08-12 08:40:24
来自man perlre
\w匹配单个字母数字字符(一个字母字符,或一个十进制数字)或_,而不是一个完整的单词。使用\w+来匹配一个Perl标识符字符串(这与匹配一个英语单词不一样)。如果"use“有效,则从当前区域设置中提取\w生成的字母字符列表。见perllocale。
别忘了use utf8指令和相关的东西。
发布于 2014-08-12 09:01:09
这适用于您的示例:
use utf8;
use strict;
use warnings;
my $str = "¿Más o menos?";
my @fields = $str =~ m/(\p{Word}+)/g;
foreach my $f(@fields) {
print $f, "\n";
}https://stackoverflow.com/questions/25259605
复制相似问题