Удалите дубликаты в исходном столбце глоссария при объединении различных значений в целевой столбец - PullRequest
0 голосов
/ 16 января 2020

Я застрял в поиске Regex для выполнения sh задачи, поэтому, пожалуйста, помогите, я уверен, что вы можете найти отличное решение. Я строю глоссарии, и иногда я получаю повторяющиеся исходные термины, которые в точности совпадают, но имеют разные цели. В качестве примера см. Ниже:

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   اولوية / اسبقية

Это файлы с разделителями табуляции. Я ищу способ найти любой повторяющийся термин «источник», такой как «Абсолютная сила», потому что он одинаков во всех трех строках и заменен только одной записью, только одной Абсолютной силой, при этом все целевые значения объединены и разделены. по характеру трубы. Таким образом, запись будет выглядеть так:

**Absolute power    سلطة استبدادية | سلطة مطلقة | قدرة مطلقة**

Поэтому я ищу Regex, чтобы автоматически выполнить эту задачу, пожалуйста. Итак, термин, за которым следует символ табуляции, за которым следуют объединенные записи Arabi c, разделенные символами трубы, по всему большому текстовому файлу глоссария. Это действительно сделало бы мой день. С уважением, Сэм

1 Ответ

0 голосов
/ 16 января 2020

Вот пример того, как вы можете сделать это, используя скрипт, предполагая, что входной файл 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}};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...