powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Выделение слов из текста
24 сообщений из 24, страница 1 из 1
Выделение слов из текста
    #34448449
Unknown :)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

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

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

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

любой текстовой файл (документы, чаты, книги) максимально возможно по пользовательскому шаблону разбить на слова, знаки препинания, предложения и абзацы для любого языка.
...
Рейтинг: 0 / 0
Выделение слов из текста
    #34448531
dr-Wicked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти чуваки называются разработчики синтаксических анализаторов.
Могу порекомендовать Red Dragon Book
Была русская редакция
Ахо, Сети Компиляторы. Принципы, технологии, инструменты. 2001(пер 2003)
Regards
dr-Wicked
...
Рейтинг: 0 / 0
Выделение слов из текста
    #34448563
Unknown :)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько будет ориентировочно стоить заказ такой библиотеки на C++?
...
Рейтинг: 0 / 0
Выделение слов из текста
    #34448747
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
Выделение слов из текста
    #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
Выделение слов из текста
    #34448886
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
Выделение слов из текста
    #34448945
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dr-WickedЭти чуваки называются разработчики синтаксических анализаторов.

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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


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