Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выделение слов из текста / 24 сообщений из 24, страница 1 из 1
09.04.2007, 19:52
    #34448449
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Привет всем!

Хотелось бы узнать от людей, которые занимались обработкой текстовой информации, как правильней выделять слова из текста?

Есть два метода:
1. Слово - соотвествует одному из заданных шаблонов
2. Начальный и конечный разделитель - соотвествует одному из шаблонов

Какой из двух вариантов оптимальный если исходный текст задан в Unicode и не известен алфавит текста?
...
Рейтинг: 0 / 0
09.04.2007, 20:08
    #34448463
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Я боюсь вы состаритесь писать шаблоны для всех слов неизвестного алфавита. Так что остаются шаблоны разделителей. К тому же, в Unicode определены категории символов, которые могут помочь при обработке текста.
И вообще -- цель у вас какая?
...
Рейтинг: 0 / 0
09.04.2007, 20:38
    #34448502
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
цель

любой текстовой файл (документы, чаты, книги) максимально возможно по пользовательскому шаблону разбить на слова, знаки препинания, предложения и абзацы для любого языка.
...
Рейтинг: 0 / 0
09.04.2007, 20:57
    #34448531
dr-Wicked
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Эти чуваки называются разработчики синтаксических анализаторов.
Могу порекомендовать Red Dragon Book
Была русская редакция
Ахо, Сети Компиляторы. Принципы, технологии, инструменты. 2001(пер 2003)
Regards
dr-Wicked
...
Рейтинг: 0 / 0
09.04.2007, 21:28
    #34448563
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Сколько будет ориентировочно стоить заказ такой библиотеки на C++?
...
Рейтинг: 0 / 0
10.04.2007, 05:24
    #34448747
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)Привет всем!

Хотелось бы узнать от людей, которые занимались обработкой текстовой информации, как правильней выделять слова из текста?

Есть два метода:
1. Слово - соотвествует одному из заданных шаблонов
2. Начальный и конечный разделитель - соотвествует одному из шаблонов

Какой из двух вариантов оптимальный если исходный текст задан в Unicode и не известен алфавит текста?
По-моему простейший вариант будет считать, что слово - это нечто, состоящее из одного или более символов из набор типа "абвгдеёжзийклмнопрстуфцчшщьымэюя" (case-insensitive), ограниченное слева/справа одним и/или более символами из набора (" !.,;:-/|\""). Это тупейший вариант. Лучшим вариантом считаю взять книгу (а лучше несколько) разбить её на слова тупейшим вариантом, слова загнать в список, список перегнать в нижний регистр, список отсортировать по алфавиту, удалить дубликаты, и сохранить в файл-словарик. При грамотной реализации процесс построения словаря занимает 1..2 секунды для текста 300..400кбайт на 900мгц машине при этом потребуется оперативной памяти в количестве (обьем_книги_в_символах * (sizeof(char*)+sizeof(char)) + sizeof(char)). Под char имеется в виду тип данных для символа. Такое делал (генератор словарного запаса книги).

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

Рекомендую почитать книжку "Жемчужины программирования". Там подробно описан процесс построения словарного запаса книги, генерации текста, создания аннаграмм и т.д.

В случае для юникода, словом является кусок фразы, ограниченной разделитялеми(знаки препинания, пробелы, запятые и т.д.), и не соприкасающийся с цифрами. А вот с разделителями в юникоде могут быть болты.

[quote Unknown :)]
Сколько будет ориентировочно стоить заказ такой библиотеки на C++?
[/quote]
Судите по времени.
По-моему, без знаний о языке это займет 1..7 дней (минимум 4 часа) работы, в зависимости от условий задачи и реализации. Без знания языка текста и словаря, я думаю, результат будет очень неудовлетворительный.
Потому что:
1) Юникод заполнен не полностью, там есть пустые места для доп знаков, который могут быть использованы как угодно) - т.е. как разделитель, так и как слово.
2) Не учитывается случай, когда символ==слово.
3) Не учитываются языки без разделителей. Пример: "課金システム切り替えに伴う重要なお知らせ" (гугл перевел как "Furthermore the importance which accompanies rating system change the news"). Фраза (сперта с sega.jp) сотоит из символов без разделителей. Вообще. Для данного случая нужен словарь.
5) Будет считаться словом любой мусор без разделителей. (т.е. одни гласные, одни согласные, буквы из разных языков и т.д.).
6) Слишком много вариантов разделителей.

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

Без словаря придется выводить правила словообразования языка и общий законы определения принадлежности знаков к слову. Тут насчет того, сколько займет не знаю. Если эти законы для языка выведены и к практическому воплощению пригодны, то вам повезло, если же НЕ выведены, то займет это очень много времени. (Имхо, парочку лет. Хотя, возможно, я пессимистичен)

Вообще (сугубо личное мнение), в общем случае (без указания языка) задача сводится к созданию ИИ :).

Если опять же, делать задачу "в лоб", то можно взять набор всех существующих слов Unicode для всех языков. :)

Для знакомых мне языков текст реально разбить только на предложения. Причем неправильно :) - если предложением считать набор символов, заканчивающихся точкой. (Кстати, их в юникоде несколько).

Вывод:
Рекомендую конкретизировать задачу для определенного языка/группы языков и построить словарь либо выявить определенные правила. Языки привел те, с которыми сталкивался. Либо конкретизируйте конкретную ситуацию, в которой слово анализируется.

ЗЫ. Возможно, что я спросонья упустил какую-то мелочь. Если так, укажите...
...
Рейтинг: 0 / 0
10.04.2007, 07:43
    #34448793
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
ErV[quot Unknown :)]Привет всем!

Хотелось бы узнать от людей, которые занимались обработкой текстовой информации, как правильней выделять слова из текста?

Есть два метода:
1. Слово - соотвествует одному из заданных шаблонов
2. Начальный и конечный разделитель - соотвествует одному из шаблонов

Какой из двух вариантов оптимальный если исходный текст задан в Unicode и не известен алфавит текста?
По-моему простейший вариант будет считать, что слово - это нечто, состоящее из одного или более символов из набор типа "абвгдеёжзийклмнопрстуфцчшщьымэюя" (case-insensitive), ограниченное слева/справа одним и/или более символами из набора (" !.,;:-/|\""). Это тупейший вариант. Лучшим вариантом считаю взять книгу (а лучше несколько) разбить её на слова тупейшим вариантом, слова загнать в список, список перегнать в нижний регистр, список отсортировать по алфавиту, удалить дубликаты, и сохранить в файл-словарик. При грамотной реализации процесс построения словаря занимает 1..2 секунды для текста 300..400кбайт на 900мгц машине при этом потребуется оперативной памяти в количестве (обьем_книги_в_символах * (sizeof(char*)+sizeof(char)) + sizeof(char)). Под char имеется в виду тип данных для символа. Такое делал (генератор словарного запаса книги).

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

Рекомендую почитать книжку "Жемчужины программирования". Там подробно описан процесс построения словарного запаса книги, генерации текста, создания аннаграмм и т.д.

В случае для юникода, словом является кусок фразы, ограниченной разделитялеми(знаки препинания, пробелы, запятые и т.д.), и не соприкасающийся с цифрами. А вот с разделителями в юникоде могут быть болты.

e Unknown :)
Сколько будет ориентировочно стоить заказ такой библиотеки на C++?
[/quote]
Судите по времени.
По-моему, без знаний о языке это займет 1..7 дней (минимум 4 часа) работы, в зависимости от условий задачи и реализации. Без знания языка текста и словаря, я думаю, результат будет очень неудовлетворительный.
Потому что:
1) Юникод заполнен не полностью, там есть пустые места для доп знаков, который могут быть использованы как угодно) - т.е. как разделитель, так и как слово.
2) Не учитывается случай, когда символ==слово.
3) Не учитываются языки без разделителей. Пример: "課金システム切り替えに伴う重要なお知らせ" (гугл перевел как "Furthermore the importance which accompanies rating system change the news"). Фраза (сперта с sega.jp) сотоит из символов без разделителей. Вообще. Для данного случая нужен словарь.
5) Будет считаться словом любой мусор без разделителей. (т.е. одни гласные, одни согласные, буквы из разных языков и т.д.).
6) Слишком много вариантов разделителей.

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

Без словаря придется выводить правила словообразования языка и общий законы определения принадлежности знаков к слову. Тут насчет того, сколько займет не знаю. Если эти законы для языка выведены и к практическому воплощению пригодны, то вам повезло, если же НЕ выведены, то займет это очень много времени. (Имхо, парочку лет. Хотя, возможно, я пессимистичен)

Вообще (сугубо личное мнение), в общем случае (без указания языка) задача сводится к созданию ИИ :).

Если опять же, делать задачу "в лоб", то можно взять набор всех существующих слов Unicode для всех языков. :)

Для знакомых мне языков текст реально разбить только на предложения. Причем неправильно :) - если предложением считать набор символов, заканчивающихся точкой. (Кстати, их в юникоде несколько).

Вывод:
Рекомендую конкретизировать задачу для определенного языка/группы языков и построить словарь либо выявить определенные правила. Языки привел те, с которыми сталкивался. Либо конкретизируйте конкретную ситуацию, в которой слово анализируется.

ЗЫ. Возможно, что я спросонья упустил какую-то мелочь. Если так, укажите...

Идеи хорошие, но они не подходят для меня.
1. Регистр не имею право менять
2. Я не могу привязываться к какому либо словарю
3. Я не проверяю орфографию слова. Мне это не важно. Даже если будет не осмысленный текст

Появилась идея как отсеивать слова.
1. Слова не начинаются на комбинацию символов {' ',',','.','!'} - не полный список значений
2. Если выполнилось условие 1, то слова заканчиваются на комбинацию символов {' ',',','.','!'} - не полный список.
3. Списки для условия 1 и условия 2 могут различаться.

Полагаю, что это правильная идея.
...
Рейтинг: 0 / 0
10.04.2007, 09:01
    #34448886
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)
Идеи хорошие, но они не подходят для меня.
1. Регистр не имею право менять

Регистр убивался только для сокращения словаря.

Unknown :)
3. Я не проверяю орфографию слова. Мне это не важно. Даже если будет не осмысленный текст

Тогда шаблон фразы и по разделителям её.

Unknown :)
Появилась идея как отсеивать слова.
1. Слова не начинаются на комбинацию символов {' ',',','.','!'} - не полный список значений

Цифры забываете. 127.0.0.1 будет расценено этим правилом как 4 слова. Потом, кроме вышеуказанных есть ещё "@#$%^&*()-=_+'`"[]{}/|\;:<>~" и знаки табуляции. Потом, кроме разделителей есть ещё 0x0A/0x0D, он же "\r\n", он же CRLF /CarriageReturn/LineFeed - т.е. перевод строки. Он, кстати, разделителем не обязательно является.

Unknown :)
2. Если выполнилось условие 1, то слова заканчиваются на комбинацию символов {' ',',','.','!'} - не полный список.
[quot]
А как же конец строки? :)

[quot Unknown :)]
3. Списки для условия 1 и условия 2 могут различаться.

В таком случае вам проще взять готовую строку и убить в ней все разделители, заменив их нулями или пробелами (что ближе). Посл этого словом можно будет назвать все, что стоит после пробела, но не является цифрой или пробелом.
...
Рейтинг: 0 / 0
10.04.2007, 09:27
    #34448945
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
dr-WickedЭти чуваки называются разработчики синтаксических анализаторов.

разбить на слова - лексический анализ
для генерации лексического анализатора можно юзать Lex

ErVБез словаря придется выводить правила словообразования языка и общий законы определения принадлежности знаков к слову. Тут насчет того, сколько займет не знаю. Если эти законы для языка выведены и к практическому воплощению пригодны, то вам повезло, если же НЕ выведены, то займет это очень много времени. (Имхо, парочку лет. Хотя, возможно, я пессимистичен)

Вообще (сугубо личное мнение), в общем случае (без указания языка) задача сводится к созданию ИИ :).
конечный автомат сойдёт=)
лексика она простая, скорее всего регулярная
грамматики
...
Рейтинг: 0 / 0
10.04.2007, 12:07
    #34449540
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
LINUXER
конечный автомат сойдёт=)
лексика она простая, скорее всего регулярная
грамматики
Для произвольного языка?
ЗЫ. Насчет ссылки - простите, не выспался, как результат - не врубаюсь пока.
...
Рейтинг: 0 / 0
10.04.2007, 13:35
    #34449869
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)цель

любой текстовой файл (документы, чаты, книги) максимально возможно по пользовательскому шаблону разбить на слова, знаки препинания, предложения и абзацы для любого языка.
ан - не только слова. правильно - синтаксический
...
Рейтинг: 0 / 0
10.04.2007, 13:55
    #34449942
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
ErV LINUXER
конечный автомат сойдёт=)
лексика она простая, скорее всего регулярная
грамматики
Для произвольного языка?
ЗЫ. Насчет ссылки - простите, не выспался, как результат - не врубаюсь пока.
языки состоят из правил. Общие для всех нужных языков правила составляют язык, для которого пишется анализатор
грубо: регулярный язык - последовательность лексем
контекстно свободный - дерево лексем
КС языки распознаются МП-автоматами
...
Рейтинг: 0 / 0
11.04.2007, 23:44
    #34454495
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Текущая задача - написать программу для сбора статистики использования слов, фраз, предложений для любого языка.

Обработанные текстовые данные (выделенные слова, знаки припинания, предложения, абзацы) должны быть занесены в базу данных. В дальнейшем собранные данные будут использоваться для других целей.
При копировании инфо о предложении в базу данных - должна быть учтена последовательность слов и знаков припинания, а также должна быть возможность динамически настраивать фильтры для парсинга .
...
Рейтинг: 0 / 0
12.04.2007, 01:25
    #34454577
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)Какой из двух вариантов оптимальный
Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный.

1. По заданной входной строке строите ее копию в нижнем регистре.
2. По той же строке строите ее копию в верхнем регистре.
3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися".
...
Рейтинг: 0 / 0
13.04.2007, 08:13
    #34457977
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
softwarer Unknown :)Какой из двух вариантов оптимальный
Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный.

1. По заданной входной строке строите ее копию в нижнем регистре.
2. По той же строке строите ее копию в верхнем регистре.
3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися".


Не получиться. Не во всех алфавитах есть заглавные и прописные буквы.

нужно искать слово по критерию
1. должно не начинаться ни на одну из заданных комбинаций символов
2. должно заканчиваться на одну из заданных комбинаций символов


:)
...
Рейтинг: 0 / 0
13.04.2007, 12:32
    #34458858
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
тебе уже сказали, что для всех языков ты не осилишь это сделать, ограничивайся разумными пределами, например, алфавитными европейскими языками
...
Рейтинг: 0 / 0
13.04.2007, 12:34
    #34458868
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
в идеале следует составить список языков или семейств
...
Рейтинг: 0 / 0
13.04.2007, 12:45
    #34458912
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)Не получиться.
Получится.

Unknown :)Не во всех алфавитах есть заглавные и прописные буквы.
Не во всех. Но по сравнению с предложенными вариантами это решение обеспечивает качество на пару порядков выше.

Что же до специфических алфавитов, то с ними в любом случае будут баааальшие трудности - скажем, одно и то же слово может быть записано как катаканой, так и хираганой, что малость помешает его распознаванию.
...
Рейтинг: 0 / 0
13.04.2007, 14:48
    #34459507
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
softwarer
Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный.

1. По заданной входной строке строите ее копию в нижнем регистре.
2. По той же строке строите ее копию в верхнем регистре.
3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися".
зачем регистры. нету isLetter()?
не на ассемблере ж пишем
...
Рейтинг: 0 / 0
13.04.2007, 14:59
    #34459551
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Unknown :)Текущая задача - написать программу для сбора статистики использования слов, фраз, предложений для любого языка.

Обработанные текстовые данные (выделенные слова, знаки припинания, предложения, абзацы) должны быть занесены в базу данных. В дальнейшем собранные данные будут использоваться для других целей.
При копировании инфо о предложении в базу данных - должна быть учтена последовательность слов и знаков припинания, а также должна быть возможность динамически настраивать фильтры для парсинга .
Ваша задача просто перегнать текст в базу?
иерархическую структуру в реляционную БД?
Не понимаю какой смысл анализировать частоту использования предложений и абзацев
...
Рейтинг: 0 / 0
13.04.2007, 15:23
    #34459671
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
LINUXERзачем регистры. нету isLetter()? не на ассемблере ж пишем
А на чем пишете и как это связано с топикстартером? Не припомню, чтобы в спецификацию юникода входил какой-то isLetter(), хотя могу и ошибаться.
...
Рейтинг: 0 / 0
13.04.2007, 22:39
    #34460642
Unknown :)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
начинаю писать на c# + sql 2005

Я прекрасно понимаю, что с помощью моего метода не возможно достичь 100% результата. Но если показатель будет 80%, то уже не плохо.

Мне не совсем важно какие слова используются в тексте. Правильно ли они написаны орфографически или грамматически. Но мне важен сохранять регистр слов.
...
Рейтинг: 0 / 0
14.04.2007, 08:10
    #34460808
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
softwarerА на чем пишете и как это связано с топикстартером? Не припомню, чтобы в спецификацию юникода входил какой-то isLetter(), хотя могу и ошибаться.
не связано\
В спецификации написано, что бывают letters, digits и многое другое
и конечно всё это можно мапить
Character properties
//600kb
...
Рейтинг: 0 / 0
15.04.2007, 12:51
    #34461649
.gc
.gc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение слов из текста
Посмотрите ICU чтобы велосипед не переизобретать:
UBreakIterator
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выделение слов из текста / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]