perl - 删除词汇表源列中的重复项,同时合并目标列中的不同含义
问题描述
我一直在寻找一个正则表达式来完成一项任务,所以请帮忙,我相信你可以用一个很好的解决方案来摇滚。我建立词汇表,有时我会得到重复的源术语,它们完全相同,但目标不同。请参见下面的示例:
Absolute potential الجهد المطلق
Absolute potential جهد مطلق
Absolute potential جهد مطلقفرق الجهد المطلق بين الفلز والمحلول
**Absolute power سلطة استبدادية
Absolute power سلطة مطلقة
Absolute power قدرة مطلقة**
Absolute power consumption استهلاك الطاقة الفعلي
Absolute pressure الضغط المطلق
Absolute prices أسعار مطلقة
Absolute priority أولوية مطلقة
Absolute priority الأولوية المُطلقة
Absolute priority اولوية / اسبقية
这些是制表符分隔的文件。我正在寻找一种方法来查找任何重复的源术语,例如绝对力量,因为它在所有 3 行中都是相同的,并且只用一个条目替换,只有一个绝对力量,同时将所有目标含义合并和分离通过管道字符。所以条目看起来像这样:
**Absolute power سلطة استبدادية | سلطة مطلقة | قدرة مطلقة**
所以我正在寻找一个正则表达式来自动完成这项任务。因此,在整个大型词汇表文本文件中,一个术语,后跟一个制表符,然后是由管道字符分隔的合并阿拉伯语条目。那真的会让我很开心。真诚的,山姆
解决方案
glossary.txt
这是一个假设输入文件是 UTF8 编码的示例,说明如何使用脚本来执行此操作:
use feature qw(say);
use strict;
use warnings;
use open qw(:std IN :encoding(utf-8) OUT :utf8);
my $fn = 'glossary.txt';
open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
my %target;
my @order;
while( my $line = <$fh> ) {
chomp $line;
my ($subject, $target) = split "\t", $line;
if (exists $target{$subject}) {
push @{ $target{$subject} }, $target;
}
else {
$target{$subject} = [ $target ];
push @order, $subject;
}
}
close $fh;
for my $subject (@order) {
say $subject . "\t" . join " | ", @{$target{$subject}};
}
推荐阅读
- metrics - 是否可以在耳语(石墨)中查看所有指标(所有路径)?
- r - 为ggplot 2添加更平滑
- javascript - 如何将字符发送到 USB 端口?
- android - 我正在制作一个像 uber 这样的应用程序,我使用了 FusedLocationApi 但它崩溃了
- c# - 在 c# 中传递 Rectangle ValueType 时获取“InvalidCastException”
- bash - bash 根据名称将文件移动到子目录
- powerbi - 找不到 DAX 函数来正确计算 Sum
- angular - Angular Material mat-paginator 固定底部
- google-chrome - 单击菜单按钮后,Jmeter 脚本等待一段时间
- mobile - 滚动已禁用,但仍可在手机上使用