首页 > 解决方案 > 将英文文本拆分成句子(多行)

问题描述

我想知道一种将文本分成句子的有效方法。句子由点+空格分隔

示例文本

 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++ 中这样做

标签: c++stringtext

解决方案


您可以使用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.


推荐阅读