Die Verwendung von C++ für die Verarbeitung natürlicher Sprache erfordert die Installation der Bibliotheken Boost.Regex, ICU und pugixml. Der Artikel beschreibt die Erstellung eines Stemmers, der Wörter auf ihre Wurzelwörter reduziert, und eines Bag-of-Words-Modells, das Text als Worthäufigkeitsvektoren darstellt. Demonstriert die Verwendung von Wortsegmentierung, Wortstammbildung und Bag-of-Word-Modellen zur Analyse von Text und zur Ausgabe der segmentierten Wörter, Wortstämme und Worthäufigkeiten.
Verarbeitung natürlicher Sprache (NLP) ist eine Disziplin, die Computer verwendet, um Aufgaben wie die Verarbeitung, Analyse und Generierung menschlicher Sprache auszuführen. In diesem Artikel wird erläutert, wie Sie die Programmiersprache C++ für NLP und Textanalyse verwenden.
Sie müssen die folgenden Bibliotheken installieren:
Der Befehl zum Installieren dieser Bibliotheken unter Ubuntu lautet wie folgt:
sudo apt install libboost-regex-dev libicu-dev libpugixml-dev
Stemmer werden verwendet, um Wörter auf ihre Wurzelwörter zu reduzieren.
#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; }
Das Bag-of-Words-Modell ist ein Modell, das Text als Worthäufigkeitsvektor darstellt.
#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; }
Das Folgende ist eine Demonstration der Textanalyse mit dem obigen Code:
#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; } }
Ausgabe:
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
Das obige ist der detaillierte Inhalt vonWie verwende ich C++ für die Verarbeitung natürlicher Sprache und die Textanalyse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!