Модераторы: ginnie, korob2001, JackYF
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> транслит латиница в русский 
:(
    Опции темы
burakov
Дата 30.11.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день, задумал
написать программку транслитерации, которая бы переводила 
текст набранный латиницей в русский. 

готовые варианты типа translit.ru меня не устроили (ну во первых потому, что данная программка будет модулем более большой моей программки, а во вторых не устраивает качество перевода из латиницы в русский).

Смысл в следующем есть имена файлов (mp3 композиции), которые набраны латиницей - их нужно перевести в русский , но стандарт латиницы не соблюдается (так практически не используется знак апострофа для обозначения твердого и мягкого знаков - ну и наверное много всяких других неточностей)

поэтому приходится создавать свои правила перевода из латиницы в русский , но и эти собственные правила не всегда приводят к желаемому результату, и поэтому есть задумка сравнения фрагментов имени файла (слов) с каким нибудь словарем ...

ВОПРОС как подключить словарь (есть ли модули словарные какие то? или где вообще набор слов этих взять в текстовом виде, чтобы можно было хотя бы из текстового файла прочитать их и по сравнивать с имеющимся именем файла и его фрагментами) 

посоветуйте ??? с какого бока тут подойти, с чего начать???
Спасибо.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 30.11.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



burakov, можно посмотреть в сторону Text::Aspell. Найти русский словарь для aspell труда не составит.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
DEER
Дата 30.11.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Lingua::RU::PhTranslit
Lingua::Translit

вобще модулей всяких вроде много...


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
burakov
Дата 2.12.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день,
что то понял, что то нет, но решил идти по следующему пути.

Скачал словарь словоформ сгенерированный из словаря ispell - размер 10Мбт.

и дальше пытаюсь изобрести каким образом привести "неверные" с точки зрения меня и словаря переводы из транслита в русские ...

делаю следующее...

Код

use strict; 
use warnings;
use Encode qw (encode decode); 

my $dic = 'win.full_dic'; 
my @dic = ();
my $str = undef;

open (FILE, $dic) or die;
while ($str = <FILE>) {
    $str =~ s/\n//g;
    push (@dic, $str); 
}
close (FILE); 

my $workdir = 'c:/111'; 
my @file = ();
my $file = undef;
opendir (DIR, $workdir) or die; 
while ($file = readdir (DIR)) {
    if ($file =~ /\.mp3$/) {
        $file =~ s/\.mp3$//;
        push (@file, $file); 
    }
}
closedir (DIR); 


my @str = ();
foreach $file (@file) {
    @str = (); 
    @str = split (' ', $file); 
    
    my $fragment = undef;
    foreach $fragment (@str) {
        
        foreach $str (@dic) {
            if ($fragment =~ /^$str$/) {
                print encode ('cp866', decode ('cp1251', $str."\n"));
            }
        }    
    }
}


но таким образом я нашел те фрагменты слова которые в словаре есть (собственно раз нашел те которые есть, значит теоретически нашел и те фрагменты имени файла, которых в словаре нет - пока в коде этого не отражено smile).

дальше тупик...
идея такая, нужно еще раз по словарю "те фрагменты, которых нет" и найти в словаре похожие слова (причем хорошо бы задать степень похожести - т.е. различие в один, два, три символа и т.д. 
Т.е. определить заранее глубину поиска


ПОНИМАЮ, что загрузил всех тут своими мыслями ВЫШЕ КРЫШИ, но 
вопрос - я вообще в том направлении думаю или изобретаю велосипед?

кроме того, такой вот метод перебора (когда словарь 10Мбт)
работает ОЧЕНЬ ДОЛГО.
на одно имя файла в том примере что привел я (а это просто печать найденных в словаре фрагментов имени файла - собственно маленькая часть задачи) уходит эдак секунд по 30.

А если файлов 2000 штук ??!! на ночь что ли комп оставлять??? smile

Спасибо.








--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 2.12.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



burakov, почему Вы не хотите использовать готовые решения? В Text::Aspell уже все сделано для Вас:

Код

    # check a word
    print $speller->check( $word )
          ? "$word found\n"
          : "$word not found!\n";

    # lookup up words
    my @suggestions = $speller->suggest( $misspelled );


suggest() возвращает варианты в порядке убывания похожести. Если очень хочется делать свой вариант, то похожесть слов можно оценивать по расстоянию левенштейна.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
burakov
Дата 2.12.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Дело в том, что я не смог найти Text::Aspell для Windows
ну то есть, чтобы все это дело в ppd находилось

ну и кроме того непонятно (по аналогии c Lingua-Ispell-0.07 кроме Text::Aspell еще чего то нужно устанавливать?)
Lingua::Ispell.pm - a module encapsulating access to the Ispell program.

ginnie, не могли бы Вы подробнее объяснить чего откуда качать и как подключать...
у меня сейчас в наличии есть словарь от ispell (файлы lang.aff, lang.dict)
Будет ли он работать под Text::Aspell?

и есть ли версия Text::Aspell под windows?

Конечно хотелось бы воспользоваться готовым решением (тем более что про расстояние левенштейна я ничегошеньки не знаю) smile

Спасибо.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ginnie
Дата 2.12.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



burakov, по поводу установки Text::Aspell под Windows смотрите в http://cpansearch.perl.org/src/HANK/Text-Aspell-0.09/README специальный подраздел. Я сам этого не делал, поэтому практических советов по установке дать не могу.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
mercenariess
Дата 8.9.2012, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Здравствузте уважаемые пользователи форума. У меня к вам есть вопрос. Сначало расскажу о своей проблеме. Я живу в Германии и у меня клавиатура немецкая и к ней я уже привык, но хотелось бы писать на моей клавиатуре по-русски. Т.е. чтобы текст при печатании в каком-либо документе или на сайте преобразовывался автоматически сразу в русский. На пример я если буду писать в чате например: Privet, kak dela? , текст печатался бы сразу же так: Привет, как дела? А то я устал транслировать текст на сайте www.translit.ru, а потом все копировать и вводить в то место, где я общаюсь.Заранее всем спасибо!
PM MAIL   Вверх
Google
  Дата 24.5.2019, 21:57 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1136 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.