首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Perl提取西班牙语(可能是非英语)单词。

用Perl提取西班牙语(可能是非英语)单词。
EN

Stack Overflow用户
提问于 2014-08-12 08:33:00
回答 3查看 927关注 0票数 2

一句话是什么?或者更好一个词是什么?到目前为止,我一直在使用字符组从文本中提取单词。原始文本在标记中,因此处理单词可能比标记它们更好。此外,使用单词避免了任何形式的标记,所以它更普遍。我正在使用本课文作为测试。在将文本添加到测试套件之前,我使用了这个regexp:

代码语言:javascript
复制
our $word_re = qr/([\w\'áéíóúÁÉÍÓÚñÑçÇüÜ]+)/
my ($stripped_word) = ( $w =~ $word_re );

这对英语来说很管用,加上一些西班牙语单词。但后来我尝试了西班牙语,我不得不补充

代码语言:javascript
复制
 ($stripped_word) = ( $stripped_word =~ /([^¿!ªº\d]+)/ ); #Some Spanish sigils and digits

注意左边的标点符号和更多的东西。一般的问题是,即使这对英语和西班牙语有效(到目前为止),这是一个黑客,它可能不适用于冰岛,捷克或达尔马提亚。因此,我测试了regexen,包括Unicode字符类,但结果是:

代码语言:javascript
复制
x ( "¿Más o menos?" =~ /(\p{Word}+)/g )
0  '¿'
1  'Má'
2  's'
3  'o'
4  'menos'

正如你所看到的,标记为“单词”字符左边的问号,最让我困惑的是,"á“作为单词的结尾字符。当然,普通的\w也不会更好

代码语言:javascript
复制
 x ( "¿Más o menos?" =~ /(\w+)/g )
0  'M'
1  's'
2  'o'
3  'menos'

因此,最后一个问题是:是否有一个(最好是简短的) regex能够以(合理)数量的语言提取单词?或者最好的方法是首先使用您感兴趣的语言中的字符枚举来提取类似单词的东西,然后去掉那些实际上不是真正的字符的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-12 08:52:44

按照perlunicode - Unicode字符属性中的定义,提取只包含任何语言使用的字母的单词:

代码语言:javascript
复制
\b\p{L}+\b

如果单词中也包含数字,请使用:

代码语言:javascript
复制
\b[\p{L}\p{Nd}]+\b
票数 2
EN

Stack Overflow用户

发布于 2014-08-12 08:40:24

来自man perlre

\w匹配单个字母数字字符(一个字母字符,或一个十进制数字)或_,而不是一个完整的单词。使用\w+来匹配一个Perl标识符字符串(这与匹配一个英语单词不一样)。如果"use“有效,则从当前区域设置中提取\w生成的字母字符列表。见perllocale

别忘了use utf8指令和相关的东西。

票数 2
EN

Stack Overflow用户

发布于 2014-08-12 09:01:09

这适用于您的示例:

代码语言:javascript
复制
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"; 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25259605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档