![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Win MK 32 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
Идея такая. В скрипт поступают текстовые команды (далее назову это "текст") на русском языке. Нужно сделать их разбор. Помогите пожалуйста понять как это сделать.
1) В тексте чередуются ключевые слова и просто текст. Либо там будет текст без ключевых слов 2) Начинаться текст может с ключевого слова, либо состоять только из текста (без ключевых слов) 3) Известно N ключевых слов. Например: Дело, Заголовок, Категория, Приоритет, Требуется, Примечание, Выполнено, Книга, Автор и т.д. Допустим в тестовом примере будет такой текст получен: Книга Марсианские хроники Автор Рэй Бредбери Требуется прочитать Примечание очень хорошая книга прочитать еще раз. Нужно получить что-то вроде таких массивов (если есть идеи как можно лучше массив представить - предлагайте пожалуйста): mykeys{ [0]=>"Дело"; [1]=>"Заголовок"; [2]=>"Категория"; [3]=>"Приоритет"; [4]=>"Требуется"; [5]=>"Примечание"; [6]=>"Выполнено"; [7]=>"Книга"; [8]=>"Автор"; } myvalues{ [0]=>"0"; [1]=>"0"; [2]=>"0"; [3]=>"0"; [4]=>"прочитать"; [5]=>"очень хорошая книга прочитать еще раз"; [6]=>"0"; [7]=>"Марсианские хроники"; [8]=>"Рэй Бредбери"; } |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
В "тексте" могут встречаться ключевые слова и разумно отделить их будет сложно.
Какое ключевое слово "Книга" в этом описании считать "ключевым"? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
Если разделитель добавить, то элементарно.
Это сообщение отредактировал(а) Чучмек - 30.7.2012, 10:18 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Fortop |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
А в чем сложность? Режем текст на слова (лексемы). Дальше бежим по циклу и анализируем имеющееся. Как анализируем? Зависит от требований. Вот, к примеру, по случаю ksnk
Чтобы разобрать его корректно потребуются следующие эвристики.
-------------------- Мир это Я. Живее всех живых. |
||||
|
|||||
Win MK 32 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
Дело в том, что пользователь системы - лично я, и я не буду ставить себе грабли такими каверзными тестовыми примерами. Разумеется вы правильно рассуждаете и мне тут ответить нечего ;) Но ведь именно такая структура команд "текст без специальных символов разделителей" единственно возможная в моем случае. Это обосновывается следующим образом. Текст получен из устной речи. Я говорю своему телефону что-то вслух. Все отправляется на веб-сервер с PHP. Все что мне не понятно - это как именно распознать команды. Все что надо я примерно описал в первом сообщение. Дальше уже проще Долой Siri, даешь PHP! Тем более у меня Android. Средства, через которые воспринимается речь и переводится в текст на телефоне не позволяют его как-то менять перед отправкой. Вообще никак. Он просто улетает в txt файле на FTP. И следом после этого выполняется запрос к скрипту (наподобие cron), только вместо крона это делает телефон Так что вся обработка - только на стороне PHP. Добавлено @ 22:34 К сожалению, нельзя разделители. И я написал почему. Неужели нет выхода тогда? Добавлено @ 22:38 Вот в чем: 1) Я не знаю как это сделать. 2) Как надо анализировать каждое слово? Что надо делать если я пойму что слово - ключевое? Что делать дальше? А что делать, если нет? Что делать дальше? 2.2) Каких требований? 3)
Я не знаю как это использовать в программе. Мы это только на словах назвали. Это сообщение отредактировал(а) Win MK 32 - 30.7.2012, 22:38 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Я пытался сказать, что без дополнительного формализма задача не решается. Как будет выглядеть этот формализм - в виде следования "эвристическим" правилам про несмешивание ключевых слов или в выделении специальным мычанием знаков препинания, не суть важно. Важно, чтобы это было удобно наговаривать.
В качестве дополнительного формализма - все "ключевые" слова обязаны следовать в одном и том-же порядке, возможно с пропусками. Со временем, вероятно, несложно будет привыкнуть к такому описанию. Насколько корректно понимает речь распознавалка? Не будут ли там встречаться "проглоченные" окончания и неправильные слова? В этом случае список "ключевых" слов нужно либо расширить, либо перенаправлять такой текст на "ручной" правёж. А с точки зрения программирования какие сложности? Выбираем регуляркой из текста одно слово, сравниваем его со списком "следующих" ключевых и если он найден - меняем текущий заполняемый раздел описания. И так с каждым словом... Главное - определится с формализмом, который будет применяться при заполнение базы книг, а программирование уже зависит от него, т.е. - вторично... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
ArNic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
ИМХО здесь можно озвучивать разделитель, по аналогии с телеграфом. Типа
Книга точка Марсианские хроники точка Автор точка Рэй Бредбери точка Требуется прочитать точка Примечание точка очень хорошая книга точка прочитать еще раз. Далее
Добавлено через 1 минуту и 24 секунды А вообще лчше, если там же на андроиде можно было бы посмотреть результат, сделать преобработку и уже после этого отправлять. Т.е. сказал, увидель, если что неправильно поправил и отправил. |
|||
|
||||
Fortop |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Если у вас лексема = слово. То по пробелам и знакам препинания (т.е. или explode или регулярки в зависимости от) Вот так как вам надо, так и анализировать. Как минимум сравнить со списком ключевых слов.
Откуда я знаю? В простейшем случае если слово ключевое, то ставим флажок у себя и набираем слова в данные до встречи следующего ключевого. Удобнее всего это сделать массивом
Это при условии уникальности ключевого слова. Если оно может быть ключевым несколько раз, там сложнее, но тоже решаемо. Ваших требований в задаче.
Реализовать в виде алгоритма-функции. -------------------- Мир это Я. Живее всех живых. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |