2012-01-07 2 views
2

Учитывая слово, я хочу получить список наиболее часто встречающихся предшественников и правопреемников этого слова на английском языке. Я разработал код, который делает анализ bigram на любом корпусе (я использовал корпус электронной почты Enron) и могу предсказать наиболее частое следующее возможное слово, но я хочу другое решение, потому что a) Я хочу проверить работу/точность моего предсказание б) Корпус или набор данных на основе решение не для невидимого словаWords Prediction - Получить наиболее частого предшественника и преемника

Например, если слово «отлично» Я хочу, чтобы слова, которые наиболее вероятно, прийти до превосходны и после отличной

Моего вопроса является ли какая-либо конкретная услуга или api для этой цели?

+0

SO - это конкретные вопросы программирования ... то, что вы описываете, является чрезвычайно общим ... в чем именно заключается ваш вопрос? – Yahia

+0

вопрос заключается в том, существует ли какая-либо конкретная услуга или api для этой цели? – MARK

+0

есть организации, которые имеют такие API-интерфейсы, но AFAIK только для внутреннего использования ... Я не знаю о публичных/коммерческих предложениях ... – Yahia

ответ

3

Любое решение этой проблемы обязательно будет основано на корпусе; вам просто нужен больший корпус. Я не знаю ни одного веб-службы или библиотеки, которая делает это для вас, но есть способы получения больших корпусов:

  • Google имеет published огромный корпус н -grams собраны из английской части Интернета. Это available через Консорциум лингвистических данных (LDC), но я считаю, что вы должны быть членом LDC для его получения. (Многие университеты.)
  • Если вы не являетесь членом LDC, попробуйте загрузить Wikipedia database dump (получите enwiki) и обучите свой предиктор.
  • Если вы используете Python, ознакомьтесь с хорошим набором корпусов (и инструментов), поставляемых с NLTK.

Что касается проблемы невидимых слов, существуют способы ее решения, например. заменяя все слова, которые встречаются реже, чем какой-либо порог, с помощью специального токена, такого как <unseen> перед тренировкой. Это сделает вашу оценку немного сложнее.

+0

Проблема в том, что иногда могут быть некоторые фразы, предпочтительные для пользователя. Например, предсказание текста на основе корпуса говорит о том, что «привет друг» должен быть более распространенным, чем «привет брат», но пользователь может чаще «приветствовать брата» пользователя. То, что я хочу сделать, - это связать брата со всеми предшественниками и преемниками друга. – MARK

+1

@Raza: если вы хотите, чтобы прогнозы соответствовали лингвистическому профилю пользователя, вам понадобится статистика n-грамм для каждого пользователя (или каким-то образом экстраполировать их на информацию о вашем пользователе). –

+0

Я получил ссылку nltk с одного из ваших сообщений. Я раньше не смотрел, но у меня есть корпус из wordfrequency.info и google corpus (не полный). То, что я точно искал для какой-либо сети доступной api для цели, такой как упомянутая здесь http://streamhacker.com/2009/05/20/building-a-nltk-freqdist-on-redis/ Вы видели какую-либо такую ​​реализацию из nltk? – MARK

2

Я просто перечитываю исходный вопрос, и я понимаю ответы, мои включенные вышли из базы. Я думаю, что первоначальный человек просто хотел решить простую проблему программирования, а не искать наборы данных.

Если вы перечислите все отдельные пары слов и посчитаете их, вы можете ответить на свой вопрос простой математикой в ​​этом списке.

Конечно, вам нужно сделать много обработки, чтобы сгенерировать список. Хотя верно, что если общее количество разных слов составляет 30 000, тогда существует миллиард возможных пар, я сомневаюсь, что на практике их так много. Таким образом, вы, возможно, можете сделать программу с огромной хеш-таблицей в памяти (или на диске) и просто посчитать их все. Если вам не нужны незначительные пары, вы можете написать программу, которая периодически отбрасывает менее важные из них во время сканирования. Также вы можете сегментировать список слов и генерировать пары сто слов стихи остальных, затем следующие сотни и так далее, и вычислять в проходах.

Мой первоначальный ответ здесь я ухожу, потому что это мой собственный связанный с этим вопрос:

Я заинтересован в чем-то подобным (я пишу систему входа, которая предложить доработок слова и знаки препинания, и я хотел бы он должен быть многоязычным).

Я нашел страницу загрузки для ngram-файлов Google, но они не так хороши, они полны ошибок сканирования. «я стал» 1, слова бегут вместе и т. д. Надеюсь, Google с тех пор улучшил свою технологию сканирования.

Идея just-download-wikipedia-unpack = it-and-strip-the-xml - это бюст для меня, у меня нет быстрого компьютера (хе, у меня есть выбор между нетбуком с атомами здесь и устройство Android). Представьте, сколько времени мне понадобится, чтобы распаковать 3 гигабайта файла bz2? 100 из xml, затем обработайте его красивым супом и фильтрами, которые он допускает посторонний путь через каждый файл и его необходимо перезапустить.

Для вашей цели (предыдущие и следующие слова) вы можете создать словарь реальных слов и отфильтровать списки ngram, чтобы исключить неверно отсканированные слова. Можно было бы надеяться, что сканирование было достаточно хорошим, чтобы вы могли исключить misscans, используя только самые популярные слова ... Но я видел некоторые признаки постоянных ошибок.

В Ngram наборов данных здесь, кстати http://books.google.com/ngrams/datasets

Этот сайт может иметь то, что вы хотите http://www.wordfrequency.info/

2

Вы должны дать еще несколько экземпляров или контекст «невидимых» слов так, что алгоритм может сделать некоторые выводы. Одним из косвенных способов может быть чтение остальной части слов в предложениях .. и поиск словаря для слов, где встречаются эти слова. В общем, вы не можете ожидать, что алгоритм будет изучать и понимать вывод в первый раз. Подумайте о себе .. Если бы вам дали новое слово ... как хорошо вы можете понять его смысл (возможно, взглянув на то, как он использовался в предложении и насколько хорошо ваше понимание), но затем вы делаете образованное предположение и в течение периода времени вы понимаете смысл.

Смежные вопросы