Как я говорю, в каком языке файл простого текста записан? [закрытый]

25
задан Valentin Rocher 25 February 2010 в 08:29
поделиться

10 ответов

Существует пакет под названием JLangDetect , который, кажется, делает именно то, что вы хотите:

langof("un texte en français") = fr : OK
langof("a text in english") = en : OK
langof("un texto en español") = es : OK
langof("un texte un peu plus long en français") = fr : OK
langof("a text a little longer in english") = en : OK
langof("a little longer text in english") = en : OK
langof("un texto un poco mas largo en español") = es : OK
langof("J'aime les bisounours !") = fr : OK
langof("Bienvenue à Montmartre !") = fr : OK
langof("Welcome to London !") = en : OK
// ...

Изменить: как указал Кевин, аналогичные функции есть в проекте Nutch , предоставленном пакет org.apache.nutch.analysis.lang .

19
ответ дан 28 November 2019 в 21:05
поделиться

Найдите цепи Маркова.

В основном вам понадобятся статистически значимые образцы языков, которые вы хотите распознать. Когда вы получите новый файл, посмотрите, какова частота определенных слогов или фонем, и сравните предварительно рассчитанный образец. Выберите ближайший.

3
ответ дан 28 November 2019 в 21:05
поделиться

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

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

Вы должны прочитать этот комментарий интеграции, он предоставляет много полезной информации.

http://crazyviraj.blogspot.com/2010/01/test-cases-for-basic-facebook-connect.html

В нем на самом деле не говорится, как делать вещи, но он гарантирует, что вы галочите все коробки того, что вы должны делать .

ie:

Не удается зарегистрироваться, если пользователь отклоняет разрешение приложению (категория: подпись

Поскольку нам нужен доступ к электронной почте адрес, регистрация должна завершиться неуспешно, если пользователь предоставляет разрешение на публикацию, но отклоняет разрешение электронной почты (категория: зарегистрироваться)

Если пользователь предоставляет адрес электронной почты который уже существует в вашей системе, Не выполнить регистрацию. Убедитесь, что нет YouFace внутренние таблицы изменяются (категория: зарегистрироваться, сопоставление 1:1) PS - когда это случается, я не нашел для тебя способ чтобы отменить авторизацию YouFace на Имя пользователя Facebook. Пользователь должен сделать это вручную, если они хотят, чтобы вы использовали тот же счет, но предоставьте разные адреса электронной почты.

Учетные записи, созданные с помощью Facebook Подключение не должно иметь возможности входа в систему использование электронной почты/пароля YouFace по умолчанию система входа (категория: вход, безопасность учетной записи). PS: С тех пор, как YouFace для учетных записей требуется пароль и созданный с помощью Facebook Connect не, не забудьте вставить случайный пароль хэш в ваш стол, чтобы избежать глупости Ошибки

Учетные записи, созданные с помощью YouFace, должны иметь возможность входа без необходимости для входа в Facebook, даже если когда ссылка на аккаунт Facebook существует (категория: вход)

Любой другой

-121--4028574-

Обнаружение языка компанией Google: http://code.google.com/apis/ajaxlanguage/documentation/#Detect

-121--1489221-

Есть ли у вас подключение к интернету, если вы это делаете, то Google Language API был бы идеальным для вас.

// This example request includes an optional API key which you will need to
// remove or replace with your own key.
// Read more about why it's useful to have an API key.
// The request also includes the userip parameter which provides the end
// user's IP address. Doing so will help distinguish this legitimate
// server-side traffic from traffic which doesn't come from an end-user.
URL url = new URL(
    "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&"
    + "q=Paris%20Hilton&key=INSERT-YOUR-KEY&userip=USERS-IP-ADDRESS");
URLConnection connection = url.openConnection();
connection.addRequestProperty("Referer", /* Enter the URL of your site here */);

String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = reader.readLine()) != null) {
 builder.append(line);
}

JSONObject json = new JSONObject(builder.toString());
// now have some fun with the results...

Если нет других методов.

0
ответ дан 28 November 2019 в 21:05
поделиться
5
ответ дан 28 November 2019 в 21:05
поделиться

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

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

5
ответ дан 28 November 2019 в 21:05
поделиться

Хотя это более сложное решение, чем вы ищете, вы можете использовать Vowpal Wabbit и обучить его предложениям с разных языков.

Теоретически вы можете получить язык для каждого предложения в ваших документах.

http://hunch.net/~vw/

(Не обманывайтесь «онлайн» в подзаголовке проекта - это просто mathspeak для обучения без необходимости иметь весь учебный материал в памяти)

-121--1489230-

Я не знаю GIT, но под SVN I просто «SVN ADD» мало что имеет значение, а не автоматически генерируемые. Так как файлы без версии исключаются из diffs, это также бережно.

-121--1579055-

NGramJ кажется немного более актуальным:

http://ngramj.sourceforge.net/

Он также имеет как символьно-ориентированный, так и байтоориентированный профили, поэтому он должен быть способен идентифицировать набор символов.

Для документов на нескольких языках необходимо идентифицировать набор символов ( ICU4J имеет CharsetDetector , который может это сделать), затем разделить текст на что-то резонансное, например, несколько разрывов строк, или абзацы, если текст помечен.

4
ответ дан 28 November 2019 в 21:05
поделиться

Начало программирования PIC...

Так как вы упомянули PIC, я добавлю два цента, порекомендовав тщательную книгу Embedded C programming и Microchip PIC Барнетта, О'Калла и Кокса. Фрагменты в книгах google

Книга использует компилятор CCS.

О, и когда вы идете встраиваться, забудьте ВСЕ, вас учили на уроке программирования.

Юп. Кроме того, документация является более скудной. Кроме того, IDE для разработки встраиваемых систем являются заметно более упрощенными (но кажущимися более простыми), чем IDE для разработки ПК.

-121--1740888-

Я бы сказал, что нормализация - это как хранить заметки, чтобы делать вещи эффективно, так сказать:

Если бы у вас была записка, которая сказала, что вы должны пойти покупки мороженого без нормализация, вы бы тогда еще одна записка, в которой говорится, что нужно идти покупка мороженого, только один в каждый карман.

Теперь, в реальной жизни, вы никогда бы не сделали Это, так почему это сделать в базе данных?

Для намереваться и реализации части, что, когда вы можете вернуться к «линго» и держать его подальше от мирян терминов, но я полагаю, вы могли бы упростить. Вы скажете то, что вам нужно сначала, а затем, когда нормализация придет в него, вы скажете, что вы убедитесь в следующем:

  1. Не должно быть повторяющихся групп информации в таблице
  2. Ни одна таблица не должна содержать данных, которые функционально не зависят от этих таблиц первичный ключ
  3. Для 3NF мне нравится Bill Kent's take on this: Каждый неключевой атрибут должен содержать информацию о ключе, весь ключ и ничего, кроме ключа.

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

-121--1276485-

Попробуйте Nutch Идентификатор языка . Обучают n-граммовым профилям языков и сопоставляют профиль имеющихся языков с входным текстом. Интересно то, что вы можете добавить больше языков, если вам нужно.

4
ответ дан 28 November 2019 в 21:05
поделиться

Хотя это более сложное решение, чем вы ищете, вы можете использовать Vowpal Wabbit и обучить его предложениям из разных языков.

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

http://hunch.net/~vw/

(Пусть вас не обманывает слово "онлайн" в подзаголовке проекта - это всего лишь математическая формулировка, означающая "учится без необходимости держать в памяти весь учебный материал")

.
2
ответ дан 28 November 2019 в 21:05
поделиться

Модели биграмм работают хорошо, их легко написать, легко обучить и требуется только небольшой объем текста для обнаружения. Идентификатор языка Nutch - это реализация Java, которую мы нашли и использовали с тонкой оболочкой.

У нас были проблемы с моделью биграмм для смешанного CJK и английского текста (т. Е. Твит в основном на японском, но содержит одно английское слово). Это очевидно при ретроспективном взгляде на математику (в японском языке намного больше символов, поэтому вероятность любой данной пары невысока). Я думаю, вы могли бы решить эту проблему с помощью более сложного лог-линейного сравнения, но я обманул и использовал простой фильтр, основанный на наборах символов, уникальных для определенных языков (т.е.если он содержит только единый хань, то он китайский, если он содержит некоторую японскую кана и унифицированный хань, то он японский).

0
ответ дан 28 November 2019 в 21:05
поделиться

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

Что касается реализации на java, то JLangDetect и Nutch, предложенные другими авторами, довольно хороши. Также посмотрите на Lingpipe, JTCL и NGramJ.


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

Примечание: детектор границ предложений (SBD) теоретически зависит от языка (проблема куриного яйца, поскольку одно нужно для другого). Но для языков, основанных на латинской графике (английский, французский, немецкий и т.д.), в которых для разграничения предложений в основном используются периоды (кроме восклицаний и т.д.), вы получите приемлемые результаты, даже если будете использовать SBD, разработанный для английского языка. Я написал основанную на правилах английскую SBD, которая очень хорошо работает для французского текста. Реализации можно найти на OpenNLP.

Альтернативным вариантом использования SBD является использование скользящего окна, скажем, из 10 лексем (разделенных пробелами) для создания псевдопредложения (PS) и попытки определить границу, где язык меняется. Это имеет тот недостаток, что если весь документ содержит n лексем, то вы выполните примерно n-10 операций классификации строк длиной 10 лексем каждая. При другом подходе, если среднее предложение содержит 10 токенов, вы выполните примерно n/10 операций классификации. Если n = 1000 слов в документе, то вы сравниваете 990 операций против 100 операций: разница на порядок.


Если у вас короткие фразы (менее 20 символов), точность определения языка, по моему опыту, невысока. Особенно в случае собственных существительных, а также существительных, которые одинаковы в разных языках, например, "шоколад". Например, является ли слово "Нью-Йорк" английским или французским, если оно встречается во французском предложении?

.
2
ответ дан 28 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: