目标: 我想分隔单词以计算它们在文档中的频率,然后对这些频率进行一些计算。
单词可以以以下任何内容开始/包含/结束:
- 数字
- 字母(包括 é、ú、ó 等,但不包括 $、#、& 等符号)
单词可以包含(但不能以开头或结尾)
- 下划线(例如:rishi_dua)
- 单引号(例如:不能)
- 连字符(例如:123-)
单词可以用任何符号或空格分隔,如 $、#、&、制表符
问题:
- 在不匹配其他特殊字符的情况下,我无法找出如何匹配 é、ú、ó 等。
- 什么是更有效的方法来做到这一点(可选)
- 目前按空间分割对我有用,因为没有其他方法
我试过的:
方法: 首先我将除 \w(字母数字加“_”)、' 和 - 之外的所有内容替换为空格然后删除 '、_ 和 '(如果在单词的开头或结尾找到)最后我将多个空格替换为单个空格并拆分单词
代码: 我正在使用一系列正则表达式替换如下:
$str =~ s/[^\w'-]/ /g;
#Also tried using $str =~ s/[^:alpha:0-9_'-]/ /g; but doesn't work
$str =~ s/- / /;
$str =~ s/' / /;
$str =~ s/_ / /;
$str =~ s/ -/ /;
$str =~ s/ '/ /;
$str =~ s/ _/ /;
$str =~ s/ +/ /;
foreach $word (split(' ', lc $str)) {
#do something
}
约束: 我必须在 Perl 中执行(因为这是我在 Perl 中编写的较大代码的一部分),但我可以使用除 Regex 之外的其他选项