自然言語処理に C++ を使用するには、Boost.Regex、ICU、pugixml ライブラリをインストールする必要があります。この記事では、単語をルート単語に減らすステマーと、テキストを単語頻度ベクトルとして表すバッグ オブ ワード モデルの作成について詳しく説明します。単語のセグメンテーション、ステミング、およびバッグオブワード モデルを使用してテキストを分析し、セグメント化された単語、語幹、および単語の頻度を出力する方法を示します。
自然言語処理 (NLP) は、コンピューターを使用して人間の言語の処理、分析、生成などのタスクを実行する学問です。この記事では、NLP およびテキスト分析に C++ プログラミング言語を使用する方法について説明します。
次のライブラリをインストールする必要があります:
これらのライブラリをUbuntuにインストールするコマンドは次のとおりです:
sudo apt install libboost-regex-dev libicu-dev libpugixml-dev
ステマーは、単語をルート単語に減らすために使用されます。
#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; }
バッグオブワード モデルは、テキストを単語頻度ベクトルとして表すモデルです。
#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; }
以下は、上記のコードを使用したテキスト分析のデモンストレーションです:
#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; } }
出力:
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
以上が自然言語処理とテキスト分析に C++ を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。