суббота, 26 мая 2007 г.

Link Grammar в моем переводчике!

Наконец-то переделал порт Link Grammar чтобы он принимал для обработки не только строку, а еще и массив слов. Результат можно скачать тут. Пока что результаты работы модуля сохраняются только в output.txt и нигде не используются, но все равно - уже какой-то прогресс есть :) Осталось сделать так, чтобы генерируемые данным модулем связи между словами понимались остальными модулями. Судя по всему - придется преобразовать класс TLink в интерфейс с тем, чтобы можно было переделывать его реализацию по мере необходимости. Правда в этом случае возникает одна проблема... Нескольким модулям может потребоваться разные реализации класса связей. Как в этом случае поступать - я пока что не имею ни малейшего представления. P.S.: К сожалению, в текущей реализации Link Grammar наблюдается странный глюк - если предложение начинается с предлога, то ссвязи в таком предложении не находятся. Если предлог убрать - находятся.

пятница, 25 мая 2007 г.

Visual Studio Code Name 'Orcas' Express Editions

Если вдруг кого заинтересует: оказывается, несмотря на то, что до выхода самой VS Orcas еще далеко, Express-версии среды уже есть здесь в виде VB, C#, Web Developer, и C++ версий.

четверг, 17 мая 2007 г.

Гугл

Весь день натыкался на новости о том, что гугл объединили (собираются объединить) все виды поиска в один. Зашел на Google Labs посмотреть что же такое там придумали-то :) Во-первых, на что стоит обратить внимание, это timeline-поиск, например вот такой, что подтверждается и обычным поиском, действительно больше всего документов по Link Grammar было в 2000-м году. Такой поиск несомненно удобен, если хочется оценить тенденции чего-либо... (Примечание: с русским текстом не работает) Во-вторых, однозначно стоит пользоваться Google Scholar. По тому же самому запросу была сразу найдена книга "Parsing English with a Link Grammar" (опубликованная не только на оригинальном сайте http://www.link.cs.cmu.edu/link/ftp-site/link-grammar/LG-tech-report.pdf, но и на других). В принципе, она находится и обычным поиском, однако для этого надо уже знать ее название и вот такого поискового запроса уже недостаточно. (Примечание: а вот на русском по запросу "грамматика связей" ничего полезного найдено не было...)

четверг, 10 мая 2007 г.

Все еще перевожу Link Grammar на C#... Уже научился загружать грамматику из файла и парсить данные. Осталось теперь научиться применять загруженную информацию. Не совсем понятна разница между тремя видами скобок. Мало информации... Пока что известно, что:
  • квадратные скобки прибавляют 1 к весу связи
  • круглые скобки - похоже просто ограничивают группу операндов в выражении
  • что делают фигурные скобки - пока что загадка
25392226.a5e351c855901a7acefacc6448e97458.1178813598.2cae6782503463cac1f3838e7e2e1f07

вторник, 1 мая 2007 г.

Эксперименты - 2

Потратив н-ое количество времени выяснил, что OpenNLP - это все-таки не совсем то, что хочется. Т.е. - оно, конечно, работает, но... Претензий много :) Например, то, как эта библиотека написана. Сразу видно тяжёлое детство в виде Java проекта :) Особенно меня потряс код вида:
class MyClass
{
   MyClass(StringBuilder sb): this (sb.ToString().ToCharArray())
   {
   }

   MyClass(char[] str)
   {
      ...
   }
}
И такое там везде... Неудивительно что столько памяти расходуется. Ну и сама работа библиотеки, хм... странная. Т.е. того, что я хочу - а хочу я предсказуемости результата парсинга - от нее не добиться. Поэтому опять переключился на Link Grammar .NET Lib. Тоже страшная :) Начать с того, что ее .Net Framework порт представляет собой смесь из трех проектов:
  1. на чистом Си
  2. на Managed С++
  3. на C#

А уж как они взаимодействуют друг с другом - это вообще песня :) Ну про то, что разобраться как работает Си кусочек практически невозможно я думаю можно и не упоминать...

MC++ проект использует часть классов, описанных в С# проекте. А тот, в свою очередь - активно пользуется классами написанными на MC++

В результате - 6 часов пытался научить эту библиотеку принимать на вход не строку с предложением, а массив слов предложения.

Примечание: нет, я конечно слышал о том, что MC++ - далеко не самый лучший язык. Но что настолько, я даже и не догадывался. Например вот такое:

int Sentence::separate_sentence(System::Collections::Generic::IList __gc* words, Sentence_s *sent) ;

Ну да ладно... Этот вопрос я все-таки решил. Впереди самое трудное - заставить Cи-часть взаимодействовать с моей базой данных, а не читать данные с диска.