|
|
|
новичок
      
участник
Last Login: 07.08.2007 22:34
Сообщ.: 9,
Visits: 57
|
|
| Очень нужно составить прогу, которая умела бы опознавать (различать), где какие слова в предложении: существительные, глаголы, прилагательные, предлоги, местоимения и прочее. Например, есть фраза: "Петя пошел в школу в семь утра". Надо, чтобы прога проанализировала это предложение и выдала: Петя - существительное; пошел - глагол; в - предлог ... и так далее. Базы для каждых из частей речи (как эталоны) имеются в Аксесс. Но если потребуется как-то иначе, то можно составить новые или переформатировать старые базы. Сам проект проги желательно в Visual Studio на Basice. Буду благодарен каждому кто хоть чем-нибудь поможет, хоть советом, хоть идеей...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
|
|
|
|
новичок
      
участник
Last Login: 07.08.2007 22:34
Сообщ.: 9,
Visits: 57
|
|
babken76 (09.07.2007) С точки зрения разработки задача простая. 1. отделить в цикле каждое слово, предполагая, что разделитель пробел.
С уважением,Вот в том-то и дело, что "отделить в цикле каждое слово" не получается. Теоретически алгоритм понятен: надо считать словами слитные последовательности символов, ограниченных либо пробелом, либо каким-то знаком прпинания. Но напрактике не получается. Не могли бы Вы помочь в составлении кода для этой части проги? С наилучшими пожеланиями,
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 15.03.2008 7:33
Сообщ.: 1 329,
Visits: 15 053
|
|
| Воспользуйтесь стандартной функцией Split, выдающий массив подстрок из строки, разбитой по разделителю.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Вот в том-то и дело, что "отделить в цикле каждое слово" не получается. Теоретически алгоритм понятен: надо считать словами слитные последовательности символов, ограниченных либо пробелом, либо каким-то знаком прпинания. Но напрактике не получается.
Как вариант:
Sub hg()
Dim f As String, g As Integer, n As Integer
Dim curr_word(256) As Variant
f = textbox1.Value
Do
g = InStr(1, f, " ", vbTextCompare)
If g = 0 Then
curr_word(n) = f
Exit Sub
End If
curr_word(n) = Left(f, g - 1)
n = n + 1
f = Right(f, Len(f) - g)
Loop Until g = 0
End Sub
На выходе получаете одномерный массив curr_word слов.
С уважением,
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Для семантического анализа можно использовать парсер mystem от Яndex'a.
|
|
|
|
|
новичок
      
участник
Last Login: 07.08.2007 22:34
Сообщ.: 9,
Visits: 57
|
|
pl (10.07.2007) Воспользуйтесь стандартной функцией Split, выдающий массив подстрок из строки, разбитой по разделителю.Рад бы это сделать, да не могу. Вот какой алгоритм мне думалось использовать. Пусть имеется, например, текст: Петя пошел в среднюю школу №3 с семи лет. А мама пошла на работу в шесть утра, когда папа вернулся со смены домой. Шаг 1. Все символы текста, отличные от А до Я и от а до я и от 0 до 9 , заменить на знак «ПРОБЕЛ». Шаг 2. Добавить к началу текста знак «ПРОБЕЛ». Шаг 3. Заменить все двойные «ПРОБЕЛЫ» на одинарные. Шаг 4. Выделить последовательность символов (слово), заключенных между двумя «ПРОБЕЛАМИ». Шаг 5. Каждое выделенное слово индексируется и помещается в Базу Данных. Шаг 6. Слова полученные из текста последовательно сравниваются со словами, имеющимися в БД, и они идентифицируются как Существительные, глаголы и прочее.
|
|
|
|
|
новичок
      
участник
Last Login: 07.08.2007 22:34
Сообщ.: 9,
Visits: 57
|
|
babken76 (10.07.2007)Как вариант:
Sub hg()
Dim f As String, g As Integer, n As Integer Dim curr_word(256) As Variant
f = textbox1.Value Do g = InStr(1, f, " ", vbTextCompare) If g = 0 Then curr_word(n) = f Exit Sub End If curr_word(n) = Left(f, g - 1) n = n + 1 f = Right(f, Len(f) - g) Loop Until g = 0 End Sub
На выходе получаете одномерный массив curr_word слов. С уважением, Уважаемый babken76! Во-первых, спасибо что откликнулись. Ну, а во-вторых, у меня что-то не получается. Здесь есть три момента когда мой debag ругается: 1. f = textbox1.Value - здесь он говорит: "Value" не является членом "System.Windows.Forms.TextBox" 2. "Public Property Left() As Integer" не имеет параметров, поэтому невозможно проиндексировать его возвращаемый тип. 3. "Public ReadOnly Property Right() As Integer" не имеет параметров, поэтому невозможно проиндексировать его возвращаемый тип. КАК БЫТЬ?
|
|
|
| |