![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
мне нужно сравнить два текстовых файла (каждый 1мил. слов), но я пока тестирую на небольшом кол-ве. Где моя ошибка, выдает мне $counter=1100 при сранении файлов, где только 2 слова одинаковы,надо, чтобы выдавало общее кол-во одинаковых слов, а не рез-т для каждой строки
пробовала также с if ( index($zeile,$suche) > -1 ) вместо $zeile eq $suche спасибо за помощь
Это сообщение отредактировал(а) LisaST - 13.1.2007, 11:11 |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
LisaST, Ваша программа напечатала на самом деле не число 1100, а четыре раза по одной цифре, означающих, что первые две строки файла perltest.txt присутствуют в perltest1.txt, а следующие две - нет. Хотя весьма странно, как так смогло получиться, учитывая, что над строками второго файла был chomp, а над строками первого - нет: все строки должны были бы отличаться (за исключением, может быть, последней).
И еще не понятно, что в Вашем понимании означает "сравнить файлы". Например, следующая программа подсчитывает кол-во строк файла perltest.txt, присутствующих в perltest1.txt.
Это сообщение отредактировал(а) amg - 13.1.2007, 11:59 |
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
спасибо за ответ, да я потом поняла, что обозначают цифры 1 и 0. задача у меня сравнить какие слова из файла 1 встречаются в файле 2 и подсчитать их кол-во (в файле 1 на строке может быть предожение или одно слово, а в файле 2 на каждой строке одно слово). первоначально идея была представить файл 1 как array и сравнивать его каждый элемент с каждой строкой в файле 2, но у меня все висло,т.к. я пыталась тестировать на 1 мил слов, потом потестировала на маленьком файле, но выдает то, что в моем первом посте вместо всего кол-ва одинаковых слов
сейчас попробую ваш вариант |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Думаю в вашем случае нужно как раз наоборот...
Второй список загоняем в массив, и сортируем его, для скорости поиска. Потом проходим по каждому слову из первого массива, такой обход легче реализовать чем сравнение в последствии с частью предложения. Ну а потом реализуем простейший поиск методом деления... по упорядоченному масиву... кстати если загнать этот список в хеш как ключи, тогда поиск будет еще проще, но накладные расходы на память возрастут очень сильно... Я набросаю самый простой способ, но еще раз скажу, что минимум по памяти он очень не выгоден, а по скорости надо мерять... Этот вариант обратный тому что предложил amg, единственное что, так он реализует еще и обход по предложению, и сравнивает слова а не строки...
Это сообщение отредактировал(а) Nab - 13.1.2007, 21:23 -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
спасибо за помощь, я прогнала программу amg на оригинальном файле с большим кол-вом слов, число одинаковых слов было слишком велико, тогда я решила разбить файл, где есть предложения на токен (исключить все знаки препинания етц) для простоты сравнения (разделитель в обоих файлах \n), еще раз прогнала программу amg, теперь рез-т, мне кажется достоверен, мне одинаковые слова нельзя удалять,т.к. потом рез-т будет использоваться для recall и precision
sorry за простые вопросы, я лингвист, а не программист. Не могу понять, почему в моем варианте выдавался рез-т для каждой строки, а не обще кол-во одинаковых слов, что надо поменять в counter? |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Не совсем понял по поводу повтора слов, хотя думаю так как второй файл скорее всего словарь, то там повторений то и нет.
По поводу удаления малозначащих слов, типа знаков препинаний и предлогов, то у я решал похожую задачу, хотя там файлы были маленькие, но их было несколько тысяч... и нужно было найти похожие. Так вот похожесть была к тому же настраиваемая, да и вооще задачка была не из легких ![]() Вы бы конкретней задачу то нарисовали, а то не понятно что ищем... и что сравниваем... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
кстати, вы меня натолкнули на мысл с повторами слов,теперь я думаю , что рез-т может быть искажен
в общих чертах задача такая, я сравниваю performance 3 статистических taggers. Протестировала их на Browncorpus (> 1мил. токен). Есть также "goldstandard" корпус с тегами, на который я ориентируюсь при определении Recall i Precision. 1 проблема в том, что все теггеры используют разные тэги (для goldstandard их кол-во~85, а для других теггеров меньше). Сейчас я пытаюсь найти Recall i Precision для существительных. Я экстрагировала сущ. из моего tagged text и из goldstandard в 2 файла, теперь надо определить (грубо не затрагивая вопрос семантики), какие слова были определны верно тестируемым теггером, для этого просто хочу сравнить сущ. из 2 файла с сущ из 1 файла, но возникает проблема одинаковых слов, допустим одно и тоже слово встречается неск. раз в обоих файлах, каждый раз, когда в ф2 будте встречаться это слово- будут ли в counter суммироваться все occurences в ф1 и так при следующем повоторе этого слова (или я не права? см. прог amg) я так и разобралась, почему в меом вар-те counter не суммировал occurences, а выдавал boolishe значения? спасибо |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Упс, я конечно извиняюсь, но большинство употребленных Вами терминов мне знакомы, и перевод я их знаю, но в контексте они никак не вяжуться...
![]() Возможно для Вас они что-то и означают, но для простого программиста мало понятны ![]() Вы не могли бы изложить задачу по-русски, и желательно дайте определение, что Вы понимаете под терминами: performance - производительность tagger - чет не понятно, типа заметок? и про теги вообще в Вашем понимании... Токен - нужно определение Recall - повторный вызов (чего?) Precision - точность (чего?) И что такое goldstandart? Я подозреваю для Вас это имя собственное... У меня такое впечатление что текст Ваших постов - это не полный, правленный перевод оригинальных текстов... ![]() -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
sorry, если сумбурно получилось, простым языком выражаясь теггер, это программа, кот присваивает каждому слову текста соотв. часть речи (подготовительная ступень для linguistic parsing), есть различные теггеры, я тестирую те, кот. работают по принципу марковской модели (статистические теггеры), вот здесь описано хорошо http://en.wikipedia.org/wiki/Part-of-speech_tagging
precision i recall на русский не переводятся, вот тут нашла их описание http://en.wikipedia.org/wiki/Information_retrieval, в общих чертах, надо определить "качество" теггера, основываясь на кол-ве верно определенной им информации....да, что-то запутанно получается...но вот, в общих чертах. теперь мне надо эти R i P для основных категорий слов (сущ, глагол, прил етц) определить goldstandard, это файл, в котором теги каждому слову были присвоены мануально, т.е. P i R максимально приближены к 100% (простым языком, вероятность того, что часть речи определа верно очень высока), т.е. это как бы эталон, на который я равняюсь при анализе "моих" теггеров токен- просто слово Это сообщение отредактировал(а) LisaST - 14.1.2007, 21:35 |
|||
|
||||
amg |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
|
||||||
|
|||||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Другими словами, частота употребления словарных слов (файл 2) в тексте (файл 1)?
|
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
спасибо большое на ответ на вопрос про $counter и особенно за предложенную программу. Возникает такая проблема, Файл 1 не совсем словарь, там слова тоже могут повторяться и, например одно и тоже слово может повторятся в Ф1 3 раза и в Ф2 4 раза, мне надо вклучить это в статистику...например сейчас , если в файле-эталоне 3 одинаковых слова, а в Ф2 4, то каждый раз, когда будет происходить сверка со словарем все 3 occurences будут суммироваться или нет?
|
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Я не вполне понял, каким образом нужно включать повторяющиеся слова "словаря" в статистику, но если заменить 1-ю строчку приведенного ниже фрагмента программы на 2-ю, то в хэше %suchen в качестве значений будут не нули, а кол-во повторений слова. Можно этим воспользоваться.
|
|||
|
||||
LisaST |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 8.4.2006 Где: Munich Репутация: нет Всего: нет |
с последней программой получился очень странный результат, почему-то цифры тоже были включены в статистику:
пример результата:
всего uniq слов 25615, по идее это очень мало, плюс всех слов с повторениями 528720, тоже странный результат, с Вашей первой программой получилось 259227 существительных,что довольно приближено к истине, тогда для Precision i Recall получаются нормальные результаты. |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Я даже не знаю, что тут сказать. Уважаемая LisaST, если бы Вы исчерпывающе и простыми словами, без употребления специальных терминов и ссылок на интернет сформулировали свою задачу и приложили бы образцы имеющих отношение к делу файлов, то, вне всяких сомнений, наше обсуждение было бы гораздо более плодотворным. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |