Я хочу реализовать некоторые приложения с n-граммами (желательно на PHP).
Какой тип n-граммов более подходит для большинства целей? Уровень слова или уровень n-грамма уровня символов? Как можно реализовать n-грамматический токенизатор в PHP?
Во-первых, я хотел бы знать, что такое N-граммы. Это верно? Это как я понимаю n-граммы:
Предложение: "Я живу в Нью-Йорке".
бирамы на уровне слов (2 для n): "# I", "Я живу", "живу в", "в Нью-Йорке", "NY #"
бирамы уровня персонажа (2 для n): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n #", "#N", "NY", "Y #"
Когда у вас есть этот массив n-грамм-частей, вы бросаете дубликаты и добавляете счетчик для каждой части, задающей частоту:
биграмы уровня слова: [1, 1, 1, 1, 1]
биграмы уровня персонажа: [2, 1, 1,...]
Правильно ли это?
Кроме того, я хотел бы узнать больше о том, что вы можете сделать с n-граммами:
- Как я могу определить язык текста с помощью n-граммов?
- Можно ли выполнять машинный перевод с использованием n-граммов, даже если у вас нет двуязычного корпуса?
- Как создать спам-фильтр (спам, ветчина)? Объединить n-граммы с байесовским фильтром?
- Как я могу найти тему? Например: есть ли текст о баскетболе или собаках? Мой подход (сделайте следующее со статьей Википедии для "собак" и "баскетбола" ): постройте векторы n-gram для обоих документов, нормализуйте их, вычислите расстояние Манхэттен/Евклида, чем ближе результат к 1, тем выше будет сходство
Как вы относитесь к моему приложению, особенно к последнему?
Надеюсь, ты поможешь мне. Спасибо заранее!