检测文本解析的句子或编号列表

时间:2013-02-07 19:40:42

标签: objective-c xcode cocoa-touch cocoa parsing

我在试图解析的文件中有一些文字。

考虑这个文本文件:

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

文本文件中有三个段落。

首先是几句话。 第二个句子有 AND 一个编号列表。 第三是一个简单的子弹清单。

我的问题是,在Objective-C中,如何确定段落组成,如果只是句子,我会将它们作为NSString返回,如果是子弹列表,我希望它们在NSArray中分开,如果段落是句子和编号列表的组合,我将它们作为NSString和NSArray的字典返回。

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

  1. 段落(句子)
  2. 子弹列表/编号列表。
  3. List和Para的组合
  4. 在阅读了大量关于regexpressions的教程和SO问题后,我尝试过这个。

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

2 个答案:

答案 0 :(得分:1)

在我写这篇文章时,你有2票赞成,没有评论或答案,这并不奇怪。人们会问:他尝试了什么?算法在哪里?他做了什么研究?等等。你问的问题不属于SO的正常范围。

您正式拥有的是语言,它由语法定义,您需要确定您的数据是否是句子在这种语言中,如果是这样,它的组成部分,称为解析,通常涉及词汇语法分析

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

关于这个主题的文献很多,但作为一个相当随机的起点,请看The Chomsky Hierarchy,它简要地定义了上述一些术语。

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

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

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

如果你在进一步走下轨道时遇到困难,那么你可以在这个领域更多地提出一个问题来帮助你。

HTH。

答案 1 :(得分:0)

如何使用Objective-C Markdown parser

语法与您正在使用的语法非常类似,您无需学习编写自己的语法分析器。