2013-02-07 39 views
-2

我有一些文本,即时尝试解析文件。检测文本解析是否为句子或编号列表

考虑这个文本文件:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do 
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
1. Line 1 
2. Line 2 

+ Line 1 
+ Line 2 
+ Line 3 

有三段在文本文件中。

首先是一对句子。 第二个人有一个句子一个编号列表。 三是一个简单的项目符号列表。我的问题是,在Objective-C中,我怎样才能弄清楚段落组合,如果它只是句子,我会将它们作为NSString返回,如果它的项目符号列表,我希望它们在NSArray中分开,如果段落是句子和编号列表的组合,我将它们作为NSString和NSArray的字典返回。

任何想法?我知道我可以使用正则表达式来出来分成数组或字符串,但我不太知道如何检测并验证是否对位是:

  1. 第(句子)
  2. 子弹名单/编号列表。
  3. 组合列表和帕拉

我已经读了一堆教程和关于regexpressions SO问题后尝试这样做。

此表达(?=\d*\s*[\.]?\s*)([a-z\s]+)确实获取编号列表,但它也抓住列表之前的前面的文本。那就是我完全陷入困境的地方。

回答

1

正如我写这篇文章你有2个投票结束,没有评论或答案,这并不奇怪。人们会问:他试过了什么?算法在哪里?他做了什么研究?等等你所要求的不属于SO的正常区域。

形式上你有什么是语言,它是由一个语法定义,你需要确定你的数据是否是一句在这种语言,如果是它的组成部分,称为解析并且通常涉及词法语法分析

可能是一个非常大的问题,但并非总是如此。

关于这个话题的文献是巨大的,但作为一个相当随机的起点,看看The Chomsky Hierarchy,它非常简短地定义了上述一些术语。

现在定义你的语法。例如。什么是句子?什么是编号句子? (可能是一个数字点后跟一个句子)什么是编号列表? (可能一个或多个编号句子)等等

你的语法类型是3吗?如果是这样,你可以用正则表达式解析它们,并且它们在Cocoa中可用。

如果不是3型,那么你就需要写一个解析器或使用解析器生成。这是一个很大的话题,但我怀疑你的语法是简单的,一个简单的临时或递归下降解析器就足够了。 (事实上​​,如果你保持你的定义简单,你可以想出一个3型语法。)

如果你在进一步追踪时遇到困难,那么你可以在SO将帮助你。

HTH。

+0

你确实写人 – jasonIM