|
|
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Привет всем! Хотелось бы узнать от людей, которые занимались обработкой текстовой информации, как правильней выделять слова из текста? Есть два метода: 1. Слово - соотвествует одному из заданных шаблонов 2. Начальный и конечный разделитель - соотвествует одному из шаблонов Какой из двух вариантов оптимальный если исходный текст задан в Unicode и не известен алфавит текста? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 19:52 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Я боюсь вы состаритесь писать шаблоны для всех слов неизвестного алфавита. Так что остаются шаблоны разделителей. К тому же, в Unicode определены категории символов, которые могут помочь при обработке текста. И вообще -- цель у вас какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 20:08 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
цель любой текстовой файл (документы, чаты, книги) максимально возможно по пользовательскому шаблону разбить на слова, знаки препинания, предложения и абзацы для любого языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 20:38 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Эти чуваки называются разработчики синтаксических анализаторов. Могу порекомендовать Red Dragon Book Была русская редакция Ахо, Сети Компиляторы. Принципы, технологии, инструменты. 2001(пер 2003) Regards dr-Wicked ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 20:57 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Сколько будет ориентировочно стоить заказ такой библиотеки на C++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 21:28 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
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 для всех языков. :) Для знакомых мне языков текст реально разбить только на предложения. Причем неправильно :) - если предложением считать набор символов, заканчивающихся точкой. (Кстати, их в юникоде несколько). Вывод: Рекомендую конкретизировать задачу для определенного языка/группы языков и построить словарь либо выявить определенные правила. Языки привел те, с которыми сталкивался. Либо конкретизируйте конкретную ситуацию, в которой слово анализируется. ЗЫ. Возможно, что я спросонья упустил какую-то мелочь. Если так, укажите... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 05:24 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
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 могут различаться. Полагаю, что это правильная идея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 07:43 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
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 могут различаться. В таком случае вам проще взять готовую строку и убить в ней все разделители, заменив их нулями или пробелами (что ближе). Посл этого словом можно будет назвать все, что стоит после пробела, но не является цифрой или пробелом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 09:01 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
dr-WickedЭти чуваки называются разработчики синтаксических анализаторов. разбить на слова - лексический анализ для генерации лексического анализатора можно юзать Lex ErVБез словаря придется выводить правила словообразования языка и общий законы определения принадлежности знаков к слову. Тут насчет того, сколько займет не знаю. Если эти законы для языка выведены и к практическому воплощению пригодны, то вам повезло, если же НЕ выведены, то займет это очень много времени. (Имхо, парочку лет. Хотя, возможно, я пессимистичен) Вообще (сугубо личное мнение), в общем случае (без указания языка) задача сводится к созданию ИИ :). конечный автомат сойдёт=) лексика она простая, скорее всего регулярная грамматики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 09:27 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
LINUXER конечный автомат сойдёт=) лексика она простая, скорее всего регулярная грамматики Для произвольного языка? ЗЫ. Насчет ссылки - простите, не выспался, как результат - не врубаюсь пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 12:07 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Unknown :)цель любой текстовой файл (документы, чаты, книги) максимально возможно по пользовательскому шаблону разбить на слова, знаки препинания, предложения и абзацы для любого языка. ан - не только слова. правильно - синтаксический ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 13:35 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
ErV LINUXER конечный автомат сойдёт=) лексика она простая, скорее всего регулярная грамматики Для произвольного языка? ЗЫ. Насчет ссылки - простите, не выспался, как результат - не врубаюсь пока. языки состоят из правил. Общие для всех нужных языков правила составляют язык, для которого пишется анализатор грубо: регулярный язык - последовательность лексем контекстно свободный - дерево лексем КС языки распознаются МП-автоматами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 13:55 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Текущая задача - написать программу для сбора статистики использования слов, фраз, предложений для любого языка. Обработанные текстовые данные (выделенные слова, знаки припинания, предложения, абзацы) должны быть занесены в базу данных. В дальнейшем собранные данные будут использоваться для других целей. При копировании инфо о предложении в базу данных - должна быть учтена последовательность слов и знаков припинания, а также должна быть возможность динамически настраивать фильтры для парсинга . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 23:44 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Unknown :)Какой из двух вариантов оптимальный Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный. 1. По заданной входной строке строите ее копию в нижнем регистре. 2. По той же строке строите ее копию в верхнем регистре. 3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2007, 01:25 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
softwarer Unknown :)Какой из двух вариантов оптимальный Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный. 1. По заданной входной строке строите ее копию в нижнем регистре. 2. По той же строке строите ее копию в верхнем регистре. 3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися". Не получиться. Не во всех алфавитах есть заглавные и прописные буквы. нужно искать слово по критерию 1. должно не начинаться ни на одну из заданных комбинаций символов 2. должно заканчиваться на одну из заданных комбинаций символов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 08:13 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
тебе уже сказали, что для всех языков ты не осилишь это сделать, ограничивайся разумными пределами, например, алфавитными европейскими языками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 12:32 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
в идеале следует составить список языков или семейств ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 12:34 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Unknown :)Не получиться. Получится. Unknown :)Не во всех алфавитах есть заглавные и прописные буквы. Не во всех. Но по сравнению с предложенными вариантами это решение обеспечивает качество на пару порядков выше. Что же до специфических алфавитов, то с ними в любом случае будут баааальшие трудности - скажем, одно и то же слово может быть записано как катаканой, так и хираганой, что малость помешает его распознаванию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 12:45 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
softwarer Как всегда, оптимален третий вариант. Алгоритм простой, эффективный и почти универсальный. 1. По заданной входной строке строите ее копию в нижнем регистре. 2. По той же строке строите ее копию в верхнем регистре. 3. Посимвольно сравниваете полученные строки; слово - последовательность "различающихся" символов, ограниченная "неразличающимися". зачем регистры. нету isLetter()? не на ассемблере ж пишем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 14:48 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Unknown :)Текущая задача - написать программу для сбора статистики использования слов, фраз, предложений для любого языка. Обработанные текстовые данные (выделенные слова, знаки припинания, предложения, абзацы) должны быть занесены в базу данных. В дальнейшем собранные данные будут использоваться для других целей. При копировании инфо о предложении в базу данных - должна быть учтена последовательность слов и знаков припинания, а также должна быть возможность динамически настраивать фильтры для парсинга . Ваша задача просто перегнать текст в базу? иерархическую структуру в реляционную БД? Не понимаю какой смысл анализировать частоту использования предложений и абзацев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 14:59 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
LINUXERзачем регистры. нету isLetter()? не на ассемблере ж пишем А на чем пишете и как это связано с топикстартером? Не припомню, чтобы в спецификацию юникода входил какой-то isLetter(), хотя могу и ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 15:23 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
начинаю писать на c# + sql 2005 Я прекрасно понимаю, что с помощью моего метода не возможно достичь 100% результата. Но если показатель будет 80%, то уже не плохо. Мне не совсем важно какие слова используются в тексте. Правильно ли они написаны орфографически или грамматически. Но мне важен сохранять регистр слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 22:39 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
softwarerА на чем пишете и как это связано с топикстартером? Не припомню, чтобы в спецификацию юникода входил какой-то isLetter(), хотя могу и ошибаться. не связано\ В спецификации написано, что бывают letters, digits и многое другое и конечно всё это можно мапить Character properties //600kb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2007, 08:10 |
|
||
|
Выделение слов из текста
|
|||
|---|---|---|---|
|
#18+
Посмотрите ICU чтобы велосипед не переизобретать: UBreakIterator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2007, 12:51 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34448449&tid=1346124]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 428ms |

| 0 / 0 |
