User:Ilis/Scripts
Jump to navigation
Jump to search
WWW::Wikipedia
Получение названия статьи из другого языкового раздела:
Файл trwiki.pl
#!/usr/bin/perl
use WWW::Wikipedia;
my $wikientry = $ARGV[0];
my $fr = $ARGV[1];
my $to = $ARGV[2];
my $wiki = WWW::Wikipedia->new(language => $fr);
my $entry = $wiki->search($wikientry);
my $rawtext = $entry->raw()."\n";
my ($res) = $rawtext =~ /\[\[$to:([^\[]+)\]\]/;
print $res."\n";
Пример использования:
./trwiki pl "Светла-над-Сазавоу" ru cs
Světlá nad Sázavou
Получение списка названий:
Файл trwiki.sh
#!/bin/bash
while read LINE; do
newname=`./trwiki.pl "$LINE" ru cs`
echo $LINE":$newname"
done < $1
Пример использования:
./trwiki.sh namelist.txt
Geo::Parse::OSM
#!/usr/bin/perl
use Geo::Parse::OSM;
binmode STDOUT, ':utf8';
my $ru; my $cs; my $csname;
my %hash = ();
my $addname = sub {
$csname = $_[0]->{tag}->{'name'};
# $csname = decode( 'utf8', $_[0]->{tag}->{'name'});
if ( $hash{$csname} ne '' && $_[0]->{tag}->{'name:ru'} eq '') {
$_[0]->{action} = 'modify';
$_[0]->{tag}->{'name:ru'} = $hash{$csname};
print Geo::Parse::OSM->to_xml( $_[0] );
# print decode( 'utf8', Geo::Parse::OSM->to_xml( $_[0] ) );
}
};
open MYINPUTFILE, '<:utf8', "ru_cs_towns.txt";
while(<MYINPUTFILE>) {
chomp;
($ru, $cs) = split /:/;
$hash{$cs} = $ru;
print "$cs --> $hash{$cs}\n";
}
binmode STDOUT;
print "<osm version='0.6'>\n";
Geo::Parse::OSM->parse_file( 'file.osm', $addname );
print "</osm>\n";
Скрипт получает список русских и оригинальных названий в виде
... Светла-над-Сазавоу:Světlá nad Sázavou Есенице:Jesenice ...
в файле ru_cs_towns.txt
и .osm-файл всех городов в какой-то области в файле file.osm
На выходе получается .osm-файл тех городов, которые находятся в списке ru_cs_towns.txt с действием 'modify' и дополнительным полем.
Особенности: загрузка файла в скрипте должна проходить через фильтр utf8, а печать из модуля без этого фильтра, поэтому в нужных местах включается директива binmode.