c++ - 将英文文本拆分成句子(多行)
问题描述
我想知道一种将文本分成句子的有效方法。句子由点+空格分隔
示例文本
The quick brown fox jumps
over the lazy dog. I love eating toasted cheese and tuna sandwiches.
我的算法是这样工作的
Read first line from text file to string
Find what is needed
Write to file
然而,有时半个句子可能在即将到来的行上。
所以我想知道解决这个问题的最佳方法是什么
是的,一个尝试过的谷歌搜索“跨多行搜索”,我不想使用正则表达式
最初我的想法是检查第一行是否以 a 结尾,.+ space
如果没有则抓住另一行并搜索它。但我有一种感觉,我错过了一些东西。
编辑:抱歉忘了提到我在 C++ 中这样做
解决方案
您可以使用std::getline()
, 与自定义分隔符'.'
#include <sstream>
#include <string>
#include <vector>
auto split_to_sentences(std::string inp)
{
std::istringstream ss(inp); // make a stream using the string
std::vector< std::string > sentences; // return value
while(true) {
std::string this_sentence;
std::getline(ss, this_sentence, '.');
if (this_sentence != "")
sentences.push_back(std::move(this_sentence));
else
return sentences;
}
}
请注意,如果您将输入文本作为流,那么您可以跳过该std::stringstream
步骤,并将流直接提供给std::getline
,代替ss
。
的使用std::move
不是必需的,但可以通过防止复制和删除std::string
.
推荐阅读
- html - 如何使用 CSS 预加载图像?
- java - 部署 EJB 项目时发生 ClassNotFoundException selenium
- java - Java 堆空间:内存不足 - 没有垃圾收集?
- xml - XQuery 返回不计算任何东西
- bash - 替换文件中的文本和 IP 地址
- sql - 子查询返回超过 1 个值。SQL 服务器
- excel - Excel VBA - 选择 2 个命名单元格或行之间的整行进行排序
- android - 为 Android 1.6 创建的应用程序在 Android 8 中失去了它的风格
- typescript - TypeScript TSLint“接口名称”在 VSC 中不起作用
- android - 如何在材料文档中创建 Snackbar?