一篇长文章,包含英语,日语,中文甚至韩语,阿拉伯语等,我现在只需要保留纯英文段落(有英文标点和特殊字符),那些包含非英语字符的段落全部删掉,怎么用正则判断?
|
davisweiAug 21, 2019
1
是不是[A-Za-z0-9]
|
|
jdhaoAug 21, 2019 via Android
2
capture group? 把英文放到 capture group,只保留这些 group 就 ok 了。英文看成 ascii 字符连续不断的字符串
|
|
SuperMildAug 21, 2019
3
如果段落与段落之间有明确区分(比如空行),那么,只取每个段落的头几个和尾几个字符来判断就可以了。
|
|
DiamondbacKAug 21, 2019
5
sed '/[^0-9A-z[:punct:]/d'
|
|
taogenAug 21, 2019 via Android
6
不知道你是什么编程语言,一般编程语言都采用的是 Unicode 字符编码。你搜一下你的语言,比如 Java 正则提取英文 Unicode 字符串
|
|
DiamondbacKAug 21, 2019
7
更正:
sed '/[^0-9A-z[:punct:]]/d' |
|
SuperMildAug 21, 2019
8
其他语种的段落里大概率会包含英文字母,如果简单抽取拼接在一起,结果看起来会很奇怪的。建议逐段处理,一段里超过多少个非英语字母就整段抛弃。
|
|
autoxbcAug 21, 2019
10
写一个函数,对每个段落打分,按照英文和标点的百分比确定分值
|
|
DiamondbacKAug 21, 2019
11
更正(加上空格):
sed '/[^0-9A-z[:punct:] ]/d' |
|
DiamondbacKAug 21, 2019
12
怎么问题又变了?不是「只保留纯英文段落」吗?
这个标准本身很明确啊,等同于将你们现在所说的「阈值」设为 0。 |
|
DiamondbacKAug 21, 2019
13
你没定义「段落」,所以这里按行来处理。补充一个 gawk 方法:
gawk "!/[^0-9A-z[:punct:] ]/{ print }" |
|
DiamondbacKAug 21, 2019
14
|