![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
ребят, подскажите как сделать вот такую вещь:
допустим есть файл, в котором встречаются строки ...получено от Климбовского Олега. ...получено от Климбовского Валерия. ...получено от Багаповой Елены. есть многомерный массив @fio=([Климбовский,Олег],[Багапова,Елена]) произвожу поиск по шаблону и получаю массив: /^(.*?) получено от (.*?)\.$/ @getfio=split(/ /,$2) т.е. @getfio=[Климбовского,Олега] а как потом сравнить массивы @fio и @getfio (проклятые падежи Это сообщение отредактировал(а) alyam - 9.8.2007, 12:49 |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
разве "климбовский" будет совпадать с "климбовского". если только обрезать несколько последних символов у элементов @getfio, а полученный результат потом искать в массиве @fio
и еще в @getfio может быть не два элемента а один [климбовского] или даже 3 [климбовского,олега,владимировича]. как сделать код Nab, более универсальным? Это сообщение отредактировал(а) alyam - 9.8.2007, 14:19 |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
хех, это задача совсем другого плана, думаю надо поискать модули для работы с русской морфологией, по поводу двух, или трех то вот так:
здесь учитываеться сначала фамилия потом имя если оно есть и потом отчество... можно сделать еще сложнее и учитывать наличие этих компонетов и в массиве записей. -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
это сложно сделать? помоги, пожалуйста
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Я не знаю чем тебе помочь... возможно кто-то решал похожую задачу или знает как к ней верно подойти, тогда надеюсь тебе помогут...
Для меня этот вопрос сейчас слишком тяжел, катастрофически не хватает времени... так что извини -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
я имел ввиду
можно сделать еще сложнее и учитывать наличие этих компонетов и в массиве записей. с переводом винительного падежа в именительный я разберусь как нибудь... |
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
можно создать хеш окончаний (последние 2 и 3 буквы), по нему менять фамилии и имена (есть 2-4 типа окончаний для каждого рода ед. числа + макс 2-3 варианта на каждый тип, все гласные не охватит т.к. от них зависит род)
потом @fio превратить в тоже в хеш и тогда ни чего не придется искать, только проверять вхожение в него Добавлено через 6 минут и 3 секунды или еще вариант -- создать хеш, в котором все окончания будут срезаны и проверять пришедшие фамилии на частичное совпадение, правда тут тогда существует небольшая вероятность совпадения фамилий ЗЫ я когда-то считал слова в книге для получения оценки гнездового гнездового входжения (т.е. однокоренных слов), приходилось учитывать все варианты, т.е. не только существительные -- если открыть правила, то вариантов оказывается совсем не много |
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
я сделал так.
преобразовал двумерный массив в одномерный. у именительных падежей убрал 2 буквы в окончании, у винительных падежей убрал 3 слова в окончании. получилось @fio=("Климбовск Ол", "Климбовск Валер", "Багапо Еле") @getfio=("Климбовск Ол") в моем случае работает, а на универсализм я не претендую. Это сообщение отредактировал(а) alyam - 10.8.2007, 09:20 |
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
если @fio пребразовать в хеш
%fio = ("Климбовск Ол" => 1, "Климбовск Валер" => 1, "Багапо Еле" => 1) поиск будет гораздо быстрее, т.к. в хеш уже заложен поиск, а массив надо перебирать Проверять можно так: if ( $fio{$getfio} ) { # автор письма найден } else { # новый автор } В хеше можно хранить не "1", а указатель что с письмом делать, главное чтоб значение не возвращало false |
|||
|
||||
| alyam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.8.2006 Репутация: нет Всего: нет |
не. хеши не подойдут... мой вариант тоже не подошел. некорректно работает с женскими фамилиями и именами.
вернулся к варианту с многомерными массивами. подскажите такую вещь: есть массив многомерный @fio=([Климбовский,Олег],[Багапова,Елена]) мне нужно одну из этих строчек объединить через точку. т.е. климбовский.олег или багапова.елена как это можно сделать попроще? функцию join не соображу как использовать в этом случае? Это сообщение отредактировал(а) alyam - 11.8.2007, 21:32 |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
alyam, вообще-то лучше в ковычки заключать фамилию и имя, да вообще всегда!
|
|||
|
||||
| fray |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 7.6.2007 Репутация: 0 Всего: 0 |
думаю здесь нужно провети типизацию фамилий в русском языке, то есть есть фамилии которые скланяются, а есть которые нет, можно воспользоватся учебником русского язывака, выбрать там все окончания которые образуются, при склонении, определять род (жен/муж), резать окончания, и сравнивать.., думаю, что сам процесс сравнения строк в перле, объяснять не столь важно
Это сообщение отредактировал(а) fray - 12.8.2007, 12:27 |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
fray,
alyam, прочтите совет Nab'а |
|||
|
||||
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
alyam, на CPAN есть модуль Lingua::RU::Sklon, который умеет склонять русские слова. Этот модуль очень сырой, но кое-как работает. С его помощью твоя задача становится элементарной.
|
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |