英语一般句子都是以(.) 或 (?) 或 (!) 结尾的(先不考虑引号),可是英语里面有好多缩写也使用了(.),如果直接使用(.) 或 (?) 或 (!) 分割文章的话,好多缩写使用(.)的地方也会被误分割了。目前我的思路是先用正则将已知的缩写里的(.)转化为一个特殊的标记,如(#),等分割完后再转化回来。可是缩写太多了,比如说什么地名或者姓名之类的,例如 U.S.A. ,在输入文章之前是不可知的,就很难将规则写进去,也无法找到一个列表,列出英文的常用的带有(.)的缩写。想问下 v 友,有没有现成的工具之类的,可以实现文章的分割?或者有什么比较好的思路?实在不行的话,只能尽量写进去过滤缩写的规则,然后再人工检查了。
1
qiayue 2016-01-08 15:53:13 +08:00 via Android 1
点空格当做分割符
|
3
DuckJK 2016-01-08 16:02:59 +08:00 1
那么,这样可以不,根据单词数量或者长度来分割(.),符合长度的才分割。
|
4
qiayue 2016-01-08 16:06:33 +08:00 via Android
中文没有任何空格都能搞定分词,英文肯定有相关的算法,你找找,没必要自己想算法。
|
6
hahastudio 2016-01-08 16:13:05 +08:00 1
有可能得上自然语言分析之类的工具了,比如 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. 按剩下的标点分句 |
7
hahastudio 2016-01-08 16:14:41 +08:00 1
|
8
lovez OP @qiayue 中文分词那个太高级了吧,那个我再接着 google 一下。我刚刚又查了一些,貌似是英语的要求有标点符号后要空格,句点空格做分割应该可以进一步,但还是不能完全解决问题。
|
9
got 2016-01-08 16:16:29 +08:00 1
检查点号前后的大写字母
|
10
lovez OP @hahastudio 我目前就是这个思路,但是那个词库自己没法实现(毕竟不是英语专业的),非常感谢提供的工具。
|
12
pheyer 2016-01-08 21:16:49 +08:00 1
http://www.oschina.net/news/68985/superword-1-0
你可以看下这个东东是怎么弄的嘛 |
15
pheyer 2016-01-08 22:05:40 +08:00 1
@lovez 看了这篇文章的介绍我觉得应该是有的: http://my.oschina.net/apdplat/blog/389200
|
16
helloboy 2016-01-08 22:28:28 +08:00 1
nltk.tokenize.sent_tokenize(text, language='english')
|
17
v2htm 2020-08-12 17:53:57 +08:00
一条正则解决问题: \s+[^.!?]*[.!?]
随便找一本书试一下就知道了 |