L'utilisation de C++ pour le traitement du langage naturel implique l'installation des bibliothèques Boost.Regex, ICU et pugixml. L'article détaille la création d'un stemmer, qui réduit les mots à leurs mots racines, et d'un modèle de sac de mots, qui représente le texte sous forme de vecteurs de fréquence de mots. Démontre l'utilisation de modèles de segmentation de mots, de radicalisation et de sac de mots pour analyser le texte et générer les mots segmentés, les radicaux de mots et les fréquences de mots.
Le traitement du langage naturel (PNL) est une discipline qui utilise des ordinateurs pour effectuer des tâches telles que le traitement, l'analyse et la génération du langage humain. Cet article explique comment utiliser le langage de programmation C++ pour le PNL et l'analyse de texte.
Vous devez installer les bibliothèques suivantes :
La commande pour installer ces bibliothèques sur Ubuntu est la suivante :
sudo apt install libboost-regex-dev libicu-dev libpugixml-dev
Les Stemmers sont utilisés pour réduire les mots à leurs mots racines.
#include <boost/algorithm/string/replace.hpp> #include <iostream> #include <map> std::map<std::string, std::string> stemmer_map = { {"ing", ""}, {"ed", ""}, {"es", ""}, {"s", ""} }; std::string stem(const std::string& word) { std::string stemmed_word = word; for (auto& rule : stemmer_map) { boost::replace_all(stemmed_word, rule.first, rule.second); } return stemmed_word; }
Le modèle de sac de mots est un modèle qui représente le texte sous forme de vecteur de fréquence de mots.
#include <map> #include <string> #include <vector> std::map<std::string, int> create_bag_of_words(const std::vector<std::string>& tokens) { std::map<std::string, int> bag_of_words; for (const auto& token : tokens) { std::string stemmed_token = stem(token); bag_of_words[stemmed_token]++; } return bag_of_words; }
Ce qui suit est une démonstration d'analyse de texte à l'aide du code ci-dessus :
#include <iostream> #include <vector> std::vector<std::string> tokenize(const std::string& text) { // 将文本按空格和句点分词 std::vector<std::string> tokens; std::istringstream iss(text); std::string token; while (iss >> token) { tokens.push_back(token); } return tokens; } int main() { std::string text = "Natural language processing is a subfield of linguistics, computer science, information engineering, and artificial intelligence concerned with the interactions between computers and human (natural) languages."; // 分词并词干化 std::vector<std::string> tokens = tokenize(text); for (auto& token : tokens) { std::cout << stem(token) << " "; } std::cout << std::endl; // 创建词袋模型 std::map<std::string, int> bag_of_words = create_bag_of_words(tokens); for (const auto& [word, count] : bag_of_words) { std::cout << word << ": " << count << std::endl; } }
Sortie :
nat lang process subfield linguist comput sci inf engin artifi intell concern interact comput hum nat lang nat: 1 lang: 2 process: 1 subfield: 1 linguist: 1 comput: 1 sci: 1 inf: 1 engin: 1 artifi: 1 intell: 1 concern: 1 interact: 1 hum: 1
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!