N-граммы: Объяснение + 2 приложения

Это вариант ответа Мэтта (я чувствую, что это немного чище) ... используйте метод:

public void TryCatch(...)
{
    try
    {
       // something
       return;
    }
    catch (FormatException) {}
    catch (OverflowException) {}

    WebId = Guid.Empty;
}

Любые другие исключения будут выброшены, и код WebId = Guid.Empty; победит ' быть пораженным. Если вы не хотите, чтобы другие исключения вызывали сбой вашей программы, просто добавьте это ПОСЛЕ двух других зацепок:

...
catch (Exception)
{
     // something, if anything
     return; // only need this if you follow the example I gave and put it all in a method
}
18
задан Hao Wooi Lim 23 June 2009 в 13:21
поделиться

2 ответа

Словарные н-граммы обычно более полезны для большинства упомянутых вами приложений для анализа текста, за исключением, возможно, определения языка, где что-то вроде триграммы символов может дать лучшие результаты. Фактически, вы должны создать n-граммовый вектор для корпуса текста на каждом языке, который вы заинтересованы в обнаружении, а затем сравнить частоты триграмм в каждом корпусе с триграммами в документе, который вы классифицируете. Например, триграмма the , вероятно, гораздо чаще встречается на английском языке, чем на немецком, и может обеспечить некоторый уровень статистической корреляции. Когда у вас есть документы в формате n-грамм, у вас есть выбор из множества алгоритмов для дальнейшего анализа, Baysian Filters, N-Nearest Neighbor, Support Vector Machines и т. Д.

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

обратите внимание: недостаточно создать вектор [1,1,1,2,1] для одного документа и вектор [2,1,2,4] для другого документа, если размеры не соответствуют т совпадение. То есть первая запись в векторе не может быть в одном документе, а - в другом, иначе алгоритмы не будут работать. Вы получите такие векторы, как [0,0,0,0,1,1,0,0,2,0,0,1], поскольку большинство документов не будут содержать большинство интересующих вас n-граммов. вверх 'функций важно, и требует, чтобы вы «заранее» решили, какие программы вы будете включать в свой анализ. Часто это реализуется как двухпроходный алгоритм, чтобы сначала определить статистическую значимость различных n-граммов, чтобы решить, что оставить. Google «выбор функций» для получения дополнительной информации.

Словарные н-граммы плюс вспомогательные векторные машины - отличный способ для определения темы, но вам нужен большой корпус текста, предварительно классифицированный на «по теме» и «не по теме» обучить классификатора. Вы найдете большое количество исследовательских работ, объясняющих различные подходы к этой проблеме, на сайте вроде citeseerx . Я бы не рекомендовал подход с евклидовым расстоянием для решения этой проблемы, поскольку он не взвешивает отдельные n-граммы на основе статистической значимости, поэтому два документа, оба из которых включают , , , , , , и из , будут считаться более подходящими, чем два документа, которые оба включают Байсианский . Удаление стоп-слов из интересующих вас n-граммов несколько улучшит ситуацию.

26
ответ дан 30 November 2019 в 08:16
поделиться

Вы правы относительно определения n-граммов.

Вы можете использовать n-граммы на уровне слов для приложений типа поиска. N-граммы символьного уровня можно больше использовать для анализа самого текста. Например, чтобы определить язык текста, я бы использовал частоту букв по сравнению с установленной частотностью языка. То есть текст должен примерно соответствовать частоте встречаемости букв на этом языке.

Н-граммовый токенизатор для слов в PHP можно сделать с помощью strtok:

http://us2.php.net/manual /en/function.strtok.php

Для символов используется разделение:

http://us2.php.net/manual/en/function.str-split.php

Затем вы можете просто разделить массив сколько угодно n-грамм.

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

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

2
ответ дан 30 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

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