Я не реализовал Bag of Words в PHP, но я сделал это в Java. Простой способ реализовать это - взять обучающие данные и токенизировать их (например, Stanford Tokenizer). После того, как вы токенизировали все свои тренировочные данные, вы можете извлечь из них 1 грамм. Я использую это http://homepages.inf.ed.ac.uk/lzhang10/ngram.html, чтобы извлечь граммы, а затем удалить количество слов из вывода и просто использовать слова. Это становится вашим набором слов, который можно использовать во время обучения и классификации. Убедитесь, что вы используете один и тот же токенизатор во время обучения, тестирования или классификации, а также используете тот же корпус во время обучения моделей.
Теперь реализовать это довольно просто, просто возьмите строку данных и токенизируйте ее, используя тот же токенизатор, который использовался для создания пакета слов. Теперь возьмите каждый жетон и выясните, есть ли этот жетон в вашем корпусе и в какой позиции. Например, у вас есть корпус, в котором есть слова: -
а
имя
The
привет
мир
И у вас есть строка "привет, меня зовут Джас". Использование токенизации дало бы следующие токены {hello ,,, my, name, is, Jas}, и при попытке сопоставить эти токены с корпусом ваш результат будет: -
2: 1 4: 1 6: 1
Это означает, что во входящей тестовой строке присутствуют слова name, hello и запятая, которые присутствуют в местах 2, 4 и 6 в вашем корпусе.