Board logo

标题: [文本处理] [已解决]sed 关键词行的上下行合并并断句 [打印本页]

作者: hlzj88    时间: 2021-9-11 16:46     标题: [已解决]sed 关键词行的上下行合并并断句

本帖最后由 hlzj88 于 2021-9-11 22:42 编辑

网上下载小说,有的是正确章节,有的是按字数断章节。所以在提取文本后,在合并文本时插入了 区分标志,如果是正确章节就替换删除标志部分文字即可,但按字数断行的,两章内容大部分是连贯的。如
n多行文字,高义
dcba第六章替换标志
高高的举起了龙角,n文字
用 sed -i "s/\ndcba/dcba/g" file 不能成功将 1  2 两行合并。网搜不得。
求助各位大佬。 如果可以,请sed解决。
  1. del /q 3?.txt
  2. del /q abc.txt
  3. copy dgdg.txt abc.txt
  4. sed "{N;s/\ndcba/dcba\n/}" abc.txt>>34.txt
  5. findstr /iv "替换标志" 34.txt>>35.txt
  6. sed "{N;s/dcba\n//}" 35.txt>>36.txt
复制代码
但是 ,导入大文本时,第一个sed对全文有效,第二个sed隔n次有效一次。
作者: WHY    时间: 2021-9-11 19:52

没明白你想做什么,
把 dcba 打头的行合并到上一行:
  1. sed -r ":a;N;/\n(dcba)/!ba;s//\1/" 1.txt > 2.txt
复制代码

作者: hlzj88    时间: 2021-9-11 20:19

本帖最后由 hlzj88 于 2021-9-11 20:21 编辑

回复 2# WHY

目的排版,有dcba行时,说明是两个文本合并的衔接部分,把dcba的上下两行合并,但遇到正常换行结尾时,依据  句号dcba等再换行,形成排版后正常行文的句子。

谢谢!
作者: WHY    时间: 2021-9-11 21:18

回复 3# hlzj88


    请给出你的真实的文本样例,修改前是什么样子,修改后是什么样子,说清楚需要如何修改。
作者: hlzj88    时间: 2021-9-11 21:45

本帖最后由 hlzj88 于 2021-9-12 18:35 编辑

回复 4# WHY

碧玉刀
作者:古龙
把dcba追进上一行,删除 替换标志行,再把下一行追进dcba行,然后根据断句的标点符号重新断句。删除dcba字符。
论坛空间有限,后期会删除大部分下文。
    小说:古龙《碧玉刀》第一回江湖少年春衫薄春天。江南。
    真正好的是陈
dcba第1章替换标志
    年竹叶青,淡淡的酒,人口软绵绵的,可是后劲却很足,两三碗下了肚,已经有陶陶然的感觉。

合并后的效果      真正好的是陈年竹叶青,淡淡的酒,人口软绵绵的,可是后劲却很足,两三碗下了肚,已经有陶陶然的感觉。

    段玉喝的虽不是竹叶青,现在也已有了那种陶陶然的感觉。
    大眼睛的小姑娘惊呼还没有完,段玉已凌空翻身,一式“细胸巧翻云”,跟着一式“平沙落雁”,轻飘飘地落在画舫上。
    四个大和尚中,有一个正留在舱外观望,看见有人过
dcba第2章替换标志
    来,立刻沉着脸低叱道:“什么人?来干什么?”
    这和尚一脸金钱麻子,眼露杀机,看来就不像是个清净的出家人。
    夜很静,夜凉如水。
    此行尾有句号,,依据 (句号dcba)再断行不合并,当然,句尾符号不只有句号一种模式 ,风吹着窗户,窗上浮动着细碎的花影。
dcba第3章替换标志
    旁边仿佛有人在轻声呼唤:“段公子,段玉,玉郎。”



谢谢!
作者: WHY    时间: 2021-9-11 22:23

本帖最后由 WHY 于 2021-9-12 06:52 编辑
  1. sed -r ":a;N;/([^。,、…?])\ndcba[^\n]*\n/!ba;s//\1/" 1.txt > 2.txt
复制代码

作者: hlzj88    时间: 2021-9-11 22:48

本帖最后由 hlzj88 于 2021-9-11 23:29 编辑

回复 6# WHY
谢谢!
读了一下午的sed文档,依旧是一头雾水。
如果 把语句翻译一下就好了。
作者: WHY    时间: 2021-9-12 07:16

回复 7# hlzj88


    有点小问题,已改。
:a 是标签
N 是把下一行追加到模式空间,下一行与当前读入的行当做 "一行" 处理
ba 是跳转到标签 a

追加下一行到模式空间,如果 "([^。,、…?])\ndcba[^\n]*\n" 不匹配模式空间的内容,跳转到标签a,继续追加,直到匹配为止。
如果匹配,执行正则替换,删除匹配行
作者: hlzj88    时间: 2021-9-12 11:27

回复 8# WHY
谢谢修改!
今天使用后发现文本内部分没有效果。观察觉得文本没有什么异常问题。把 ^ 替换为 $,所有都可以合并,但结果不是需要的。
在楼上添加了不成功部分文本。希望有时间能再看看。
作者: WHY    时间: 2021-9-12 13:48

回复 9# hlzj88


1.我测试没有问题,sed 版本 4.4
2.表达式 "([^。,、…?])\ndcba[^\n]*\n" 中的 ^ 表示 "否定",不是表示字符串开头的锚点。
3.按照你的描述,关键词 dcba 的上一行以句号(或其它)标点结尾的行不需要合并,这个并没有问题。
作者: hlzj88    时间: 2021-9-12 14:40

本帖最后由 hlzj88 于 2021-9-12 18:36 编辑

回复 10# WHY

首先谢谢!  我的sed版本看不了,系统win7,所以也换了sed4.4,的确是有合适标点就不合并。现在是  dcba那一行有部分并没有删除。比如  dcba第18章
你的语句能看懂 2  3,譬如 s/// 怎么理解?

残余的dcba行用findstr /iv 去掉了。

再次感谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2