如何实现一篇英文文章分割成一个一个的句子?

2016-01-08 15:42:14 +08:00
 lovez

英语一般句子都是以(.) 或 (?) 或 (!) 结尾的(先不考虑引号),可是英语里面有好多缩写也使用了(.),如果直接使用(.) 或 (?) 或 (!) 分割文章的话,好多缩写使用(.)的地方也会被误分割了。目前我的思路是先用正则将已知的缩写里的(.)转化为一个特殊的标记,如(#),等分割完后再转化回来。可是缩写太多了,比如说什么地名或者姓名之类的,例如 U.S.A. ,在输入文章之前是不可知的,就很难将规则写进去,也无法找到一个列表,列出英文的常用的带有(.)的缩写。想问下 v 友,有没有现成的工具之类的,可以实现文章的分割?或者有什么比较好的思路?实在不行的话,只能尽量写进去过滤缩写的规则,然后再人工检查了。

2824 次点击
所在节点    问与答
17 条回复
qiayue
2016-01-08 15:53:13 +08:00
点空格当做分割符
lovez
2016-01-08 15:57:47 +08:00
@qiayue Mr. aaa 之类的,也不行的,而且如果录入的文章,也不能保证点后面有空格。
DuckJK
2016-01-08 16:02:59 +08:00
那么,这样可以不,根据单词数量或者长度来分割(.),符合长度的才分割。
qiayue
2016-01-08 16:06:33 +08:00
中文没有任何空格都能搞定分词,英文肯定有相关的算法,你找找,没必要自己想算法。
lovez
2016-01-08 16:12:23 +08:00
@DuckJK 也有只有一个单词的话呀 0.0
hahastudio
2016-01-08 16:13:05 +08:00
有可能得上自然语言分析之类的工具了,比如 Python 和 NLTK :
http://stackoverflow.com/questions/9474395/how-to-break-up-a-paragraph-by-sentences-in-python
http://textminingonline.com/dive-into-nltk-part-ii-sentence-tokenize-and-word-tokenize

如果自己实现的话,我猜就需要这样了:
0. 现有一个用标点结尾的词库 ("Mr.","Dr.")
1. 找到所有语句终结的标点
2. 往前看一个词,如果在词库里,就忽略这个标点
3. 按剩下的标点分句
hahastudio
2016-01-08 16:14:41 +08:00
lovez
2016-01-08 16:15:41 +08:00
@qiayue 中文分词那个太高级了吧,那个我再接着 google 一下。我刚刚又查了一些,貌似是英语的要求有标点符号后要空格,句点空格做分割应该可以进一步,但还是不能完全解决问题。
got
2016-01-08 16:16:29 +08:00
检查点号前后的大写字母
lovez
2016-01-08 16:18:38 +08:00
@hahastudio 我目前就是这个思路,但是那个词库自己没法实现(毕竟不是英语专业的),非常感谢提供的工具。
lovez
2016-01-08 16:23:18 +08:00
@got 0.0 没有那么简单呀
pheyer
2016-01-08 21:16:49 +08:00
http://www.oschina.net/news/68985/superword-1-0
你可以看下这个东东是怎么弄的嘛
lovez
2016-01-08 21:41:37 +08:00
@pheyer 谢谢
pheyer
2016-01-08 22:01:09 +08:00
@lovez 我刚看了一下,好像只是对单词进行分析,不太清楚里面有没有对句子进行分析
pheyer
2016-01-08 22:05:40 +08:00
@lovez 看了这篇文章的介绍我觉得应该是有的: http://my.oschina.net/apdplat/blog/389200
helloboy
2016-01-08 22:28:28 +08:00
nltk.tokenize.sent_tokenize(text, language='english')
v2htm
2020-08-12 17:53:57 +08:00
一条正则解决问题: \s+[^.!?]*[.!?]
随便找一本书试一下就知道了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX