【发布时间】:2014-10-05 05:53:13
【问题描述】:
一句话是什么?或者更好的是,一个词是什么? 到目前为止,我一直在使用字符组从文本中提取单词。原始文本在降价中,因此使用单词可能比标记它们更好。此外,使用文字会避开任何类型的标记,因此更通用。我使用this text 作为测试。 在将该文本添加到测试套件之前,我使用的是这个正则表达式:
our $word_re = qr/([\w\'áéíóúÁÉÍÓÚñÑçÇüÜ]+)/
my ($stripped_word) = ( $w =~ $word_re );
加上一些西班牙语单词,它对英语非常有效。但后来我尝试了西班牙语,我不得不添加
($stripped_word) = ( $stripped_word =~ /([^¿!ªº\d]+)/ ); #Some Spanish sigils and digits
照顾左标点符号和其他一些东西。 一般的问题是,即使这适用于英语和西班牙语(到目前为止),它也是一个黑客,它可能不适用于冰岛语、捷克语或达尔马提亚语。所以我测试了包含 Unicode 字符类的正则表达式,但结果如下:
x ( "¿Más o menos?" =~ /(\p{Word}+)/g )
0 '¿'
1 'Má'
2 's'
3 'o'
4 'menos'
正如你所见,它把左边的问号标记为“word”字符,而最让我困惑的是,“á”作为词尾字符。当然,普通的\w也好不了多少
x ( "¿Más o menos?" =~ /(\w+)/g )
0 'M'
1 's'
2 'o'
3 'menos'
所以,最后一个问题是:是否有一个(最好是简短的)正则表达式能够以(合理的)数量的语言提取单词?或者最好的方法是首先使用您感兴趣的语言中的字符枚举来提取类似单词的内容,然后将它们去除实际上不是真正字符的内容?
【问题讨论】: