【发布时间】:2018-06-09 11:47:43
【问题描述】:
我想知道一种将文本分成句子的有效方法。 句子由点+空格分隔
示例文本
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
但是,有时半个句子可能会出现在即将到来的行中。
所以我想知道解决这个问题的最佳方法是什么
是的,一个尝试过的谷歌搜索“跨多行搜索”,我不想使用正则表达式
最初我的想法是检查第一行是否以.+ space 结尾,如果没有,则抓取另一行并搜索它。但我有一种感觉,我错过了一些东西。
编辑:抱歉忘了说我是用 C++ 做的
【问题讨论】:
-
BreakIterator可能会有所帮助? " 句子边界分析允许选择正确解释数字和缩写中的句点,以及尾随标点符号,如引号和括号。" -
你最初的想法有什么问题?那应该可以。
-
不要逐行阅读,单独阅读每个字符并吃回车
\r和换行\n。为您当前的工作“堆栈”保留一个 std::string 并在您看到句点(或eof)时弹出堆栈。 -
你不能将整个文本加载到内存中,然后搜索
'.',后跟一个空格吗? -
您确定该行以
.+space结尾而不是.+newline结尾吗?我会首先阅读单词stream >> word,然后检查每个单词的最后一个位置是否为'.'。这样>>将处理空格字符以外的空格。