免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sxingbai
打印 上一主题 下一主题

[文本处理] 文字排版等两个问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-07-06 21:32 |只看该作者
回复 10# cao627
多谢大侠热心相助
第一处红色是我粗心,应该删除换行的
以汉字数字或阿拉伯数字单独成行 是指文章中章节的序号
同时考虑序号的前面可能会有“第”,后面可能会有“章”“节”“回”等,如第12节或第六节

另外第二个问题,复制文本的局部验证可以,不知道为什么整个文本就不行了?


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
12 [报告]
发表于 2013-07-06 22:23 |只看该作者
本帖最后由 cao627 于 2013-07-06 22:24 编辑
  1. sed -r ':1;/^[^“]*[。?!……]”*$|^[^。……!:?,]*$/!{N;s/\n//;t1}' file
复制代码
@sxingbai

另外第二个问题,复制文本的局部验证可以,不知道为什么整个文本就不行了?
  1. $ awk '{j=2}/1=/{a=$2;j=3}{for(i=j;i<=NF;i++)s=s!=""?s"\n"$i"见"a:$i"见"a}/^$/{print s;s=""}END{print s}1' file
复制代码
是不是这个命令应用与你实际的文件时不好用了?
可能是你的文件的问题。比如window下的文本文件和linux下的文本文件是有格式差异的。

论坛徽章:
0
13 [报告]
发表于 2013-07-07 08:20 |只看该作者
回复 12# cao627
十分感谢,但还得继续麻烦
第一个问题的解法对第一个问题十分完美,对稍加变换就不行了
比如原文本变为:
这是一个炎热的
夏天,树上的叶子
都打着卷儿。
小青无精打采地在路边走着,
即使挑树荫地儿走,仍感觉一阵阵
热风像火舌一样舔舐着皮肤……
突然,她似乎听到一个声音在喊:“喂,小青!
小青!
等等我!”
这是一个炎热的
夏天,树上的叶子
都打着卷儿。
小青无精打采地在路边走着,
即使挑树荫地儿走,仍感觉一阵阵
热风像火舌一样舔舐着皮肤……
突然,她似乎听到一个声音在喊:“喂,小青!
小青!
等等我!”
运行结果则为:
这是一个炎热的
夏天,树上的叶子都打着卷儿。
小青无精打采地在路边走着,即使挑树荫地儿走,仍感觉一阵阵热风像火舌一样舔舐着皮肤……
突然,她似乎听到一个声音在喊:“喂,小青!小青!等等我!”这是一个炎热的夏天,树上的叶子都打着卷儿。小青无精打采地在路边走着,即使挑树荫地儿走,仍感觉一阵阵热风像火舌一样舔舐着皮肤……突然,她似乎听到一个声音在喊:“喂,小青!小青!等等我!”

红色的部分都出乎意料。


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
14 [报告]
发表于 2013-07-07 10:08 |只看该作者
@sxingbai
  1. sed -r ':1;/[。?!……]”$|^[^“]*[。?!……]$|^[^。……!:?,]*$/!{N;s/\n//;t1}' file
复制代码
运行结果则为:
这是一个炎热的
夏天,树上的叶子都打着卷儿。

红色文字的行的换行符号没有去掉,不是我的问题,是你没有讲清楚不规则.

1.以汉字数字或阿拉伯数字单独成行,或前加一个“第”后加“章”或“节”或“回”等

红色文字符合 以汉字数字或阿拉伯数字单独成行这个条件

你的条件要么是: 以数字单独成行,或以“第”字开头“回”或“章”字结束的行,保留换行符号?

论坛徽章:
0
15 [报告]
发表于 2013-07-07 10:16 |只看该作者
回复 14# cao627
嗯,就是章节符号保留原样,不删除换行符
如:
5

第8节
第十二回

这些保留原样


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
16 [报告]
发表于 2013-07-07 14:26 |只看该作者
@sxingbai
  1. sed -r ':1;/[。?!……]”$|^[^“]*[。?!……]$|^[ ]*第?[0-9]*[一二三四五六七八九十]*[章回节]?[ ]*$/!{N;s/\n//;t1}' file
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
17 [报告]
发表于 2013-07-07 14:57 |只看该作者
当然
如果有这样的行

第1
十二回

也会保留原样


如果要删除这样的行上的换行,表达式要写的还要长。

对于这样的行:

第十2回

是保留原样?还是删除话行?我的代码是删除换行的。但或许你的要求是保留原样?

对于这样情况:

他送了她
5
支玫瑰

这又怎么办?









论坛徽章:
0
18 [报告]
发表于 2013-07-07 19:17 |只看该作者
多谢,应该大体能够满足需要了
因为ocr的文本和原书本上的换行一致,一般不会出现数字不是章节或页码而单独盛行的情况

论坛徽章:
0
19 [报告]
发表于 2013-07-07 19:51 |只看该作者
回复 16# cao627

awk那个句子看得稍有眉目
sed的这个句子中的:1;和!{N;s/\n//;t1}不知道什么意思
看来很有学习头儿
   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
20 [报告]
发表于 2013-07-07 20:19 |只看该作者
@sxingbai
N是sed中的一个命令。要理解它的作用的话,你要先理解sed的工作原理。可以看去一下sed的基础,不复杂。
t也是sed的一个命令 作用是前面的s命令有替换替换, 就跳转到一个位置, t1 就是跳到1这个标记的位置,这个位置在前面用:1标记的位置。


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP