Страницы: 1
RSS
Поиск простых составляющих в сложных словах из того же списка
 
Доброго времени суток уважаемые форумчане.
Прошу помощи в таком вопросе:
Телевизор - сложное слово. В нем можно разглядеть 2 компонента. Теле и визор. У нас список из 200 000 слов. Там есть как простые (теле, визор), так и сложные, составные (телевизор). Сложные иногда могут быть записаны как телешвизор, телешизор, телвизор - то есть на стыке может добавиться какая-то буковка, может измениться существующая или выпасть конечная одного или начальная другого слова. Как найти список сложных слов, которые состоят из элементов из того же списка? Условие - длина элемента от 3 знаков. Все, что меньше, не честно, не считается.
Очень бы хотелось услышать хотяб алгоритм.
Спасибо заранее.
 
Цитата
У нас список из 200 000 слов.
Замечательно.
Но у нас его нет.
Тренироваться на кошках?.
Поделитесь частью.
А список правильных слов есть?
И мысли есть,и некоторые алгоритмы.

А не проще через проверку правописания Вордом пропустить макросом?
Изменено: Doober - 13.11.2013 03:24:56
 
приложил примерчик, через word возможно, увидеть бы пример
 
Можно конечно было через массивы (в этом случае в столбце Шаблон - кратная форма подслова) и InStr, но так было интереснее.
 
Спасибо за отклики. Спасибо, что сдвинули из тупика.

Первому ответившему:
1) Список из 266820 слов http://yadi.sk/d/mfjEKZtTCkxyS не на русском языке
2) Полного списка правильных слов нет. Его как раз и будем вычленять (одна из подзадач). Но несколько сотен правильных наскрести можно достаточно оперативно, если поможет делу. Собрать .txt файл, Doober?
3) Проверка правописания не очень справлялась, по крайнее мере когда пытались ее подобному обучить. То ли у нее, то ли у нас ума не хватило.

Второму ответившему:
1) вопрос - шаблон можем генерировать, не прописивая вручную все (нам заранее неизвестные) комбинации?
2) Для нас на самом деле не столь важно - точно или частичное вхождение. Лишь бы распозновало. Но идея интересная, даже очень.
телешвизорСложное слово: 1-точное, 2-точное
телиграСложное слово: 1-частичное, 2-точное
телигрунокСложное слово: 1-частичное, 2-частичное
видеигрушСложное слово: 1-частичное, 2-частичное
телешизорСложное слово: 1-точное, 2-частичное
телвизор Сложное слово: 1-частичное, 2-точное
телевизорСложное слово: 1-точное, 2-точное
видеоиграСложное слово: 1-точное, 2-точное
видеиграшкаСложное слово: 1-частичное, 2-точное
Для немецкого языка задача (без алгоритма, лишь краткие итоги) решена в приложении к словарю DUDEN - Deutsches Universalwörterbuch (в приложении курсовая на на эту же тему, без описания алгоритма, но с примерами что можно искать). Вчера пролистал в книжком магазине словарей 30 и случайно нашел. Увидел впервые, но надеюсь не в последний раз. Но для других языков особо не встречал, а если и встречал итог, то никогда не видел и не читал, как это получилось.


Еще раз спасибо. Тяжко лингвисту на свете.
к.ф.н.
 
Странно, вопрос задавал один, отвечает другой - коллектив соавторов?
По вопросу о шаблоне. Конечно шаблон можно делать и программно. В данном случае, использование регулярных выражений - избыточно.
Можно использовать обычный InStr
1. Отбрасываем первую или последнюю букву (или ещё как хочется) в очередном считаемом первым компоненте и InStr по исследуемой строке. Если найдено, то есть частичное совпадение, если нет берём из массива следующий компонент на проверку
2. Если есть частичное совпадение первого компонента, то проверяем есть ли полное нахождение. Если да, то запоминаем.
3. Проверяем, есть ли в исследуемой строке ещё символы после символов найденного компонента, если есть, то этот компонент действительно первый и начинаем поиск второго компонента в исследуемой строке по той же методике, но начиная с символа, следующего за первым компонентом.
4. Если количество после найденного компонента недостаточно, то найденный компонент на самом деле второй. Тогда ищем первый компонент.
Где то такой алгоритм. Честно говоря задача, поставленная вами, столь нечётко изложена, что не совсем понятно, что всё же нужно делать.
 
я занимался примерно такой работой...
делал бы так:

0 сначала индексируем словарь - группируем по первым трем буквам( можно заносить в dictionary)
те у нас получатся группы, к которым можно обратиться по ключу - первые три буквы.
затем идем по всему массиву:
1 берем первые трибуквы
2 ищем в соотв группе слова меньшей длины, проверяем на полное совпадение, если отличия укладываются в допуски( 1 символ отличается, или переставлены и тп - вообще тут закавыка, как определить границы) запоминаем
3 удаляем из анализируемого слова найденную часть
4 если остаток >2символовпоторяем п2, запоминаем как второй компонент
5 если в п4 ничего не найдено, то удаляем первый символ из остатка, повторяем п4

если словоизменения касаются по большей части концов слов, то должно работать. и довольно быстро..
Живи и дай жить..
 
Цитата
Странно, вопрос задавал один, отвечает другой - коллектив соавторов?

Нас двое Автор и Помощник) иногда уточняет, хотя и не очень лаконично, простите.
Спасибо за помощь, будем обрабатывать.  
Страницы: 1
Читают тему
Наверх