在 C++ 中标记 latin-1 文本

Posted

技术标签:

【中文标题】在 C++ 中标记 latin-1 文本【英文标题】:Tokenize latin-1 text in c++ 【发布时间】:2015-03-24 12:48:04 【问题描述】:

我有一个带有拉丁文本的 mysql 表。我正在尝试将此文本标记为单词。

我遇到了 boost 和 ICU 标记器。问题是这些库希望我弄清楚边界这个词。

我尝试遵循 boost 代码(使用默认标记器,即空格和标点符号)。

int main()

   using namespace std;
   using namespace boost;

   string s = "Tänk efter nu – förr'n vi föser dig bort";
   tokenizer<> tok(s);

   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg)
       cout << *beg << "\n";
   

   return 0;

它确实给了我单词列表。但在这里我假设空格是正确的单词分隔符。

考虑到这些 (http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Languages_with_complete_coverage) 语言的集合,使用上述代码是否安全?

或者你有没有其他解决方案?

【问题讨论】:

boost.locale: boundary analysis 【参考方案1】:

ICU 支持考虑文本语言特性的边界分析:

http://userguide.icu-project.org/boundaryanalysis

【讨论】:

以上是关于在 C++ 中标记 latin-1 文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 从字符串中删除元标记?

如何使用 c++ 仅查找特定 HTML 标记的内容?

在简历 (NER) 中标记自定义实体

标记和未标记的中断,在 C# 或 C++ 中继续 [关闭]

如何在 C++ 中标记字符串?

在 HTML 标记的文本内容中查找单词/文本并用突出显示标记替换匹配项的可靠方法是啥?