Board logo

标题: [文本处理] 批处理如何实现将txt文本根据一定字数之后的某个标点符号进行分割 [打印本页]

作者: xcjm688    时间: 2016-9-5 10:12     标题: 批处理如何实现将txt文本根据一定字数之后的某个标点符号进行分割

本帖最后由 pcl_test 于 2016-9-5 12:41 编辑

【求助】txt分割根据一定字数之后的某个标点分割
是这样,一个txt文件,我想通过200个字左右的最近的一个句号,进行txt分割。主要是想实现txt分割之后有一定的阅读性,直接按照字数或者大小分割 没有课阅读性。希望有个大神能够 分享一个。

再解释下:随便一个小说,采集下来通过识别他的字数查找第200个字符左右最近的一个句号,然后分割,然后输出保存为txt
作者: GNU    时间: 2016-9-5 11:03

试试这3个代码
http://bbs.bathome.net/thread-2104-2-1.html#pid12065
http://bbs.bathome.net/thread-2104-3-1.html#pid12158
http://bbs.bathome.net/thread-2104-3-1.html#pid12183
作者: pcl_test    时间: 2016-9-5 12:47

小说不是按节按章划分好的么,还是说没有划分段落?采集的哪个网站的小说?
作者: CrLf    时间: 2016-9-5 12:55

六脉神剑...
  1. @mshta http://bathome.net/s/hta "n=0;type('你的小说.txt').replace(/.{200,}?。|.+/g,function(str){save(str,++n + '.txt');return n+'.txt 长度为 ' + str.length+' 字符\r\n'})"|more
复制代码

作者: pcl_test    时间: 2016-9-5 23:35

  1. //&cls&dir /a-d/b "小说.txt"|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.FileSystemObject'), s='';
  3. while(!WSH.StdIn.AtEndOfStream){
  4.     var line = WSH.StdIn.ReadLine(), fname, fext;
  5.     line.replace(/(.+)(\.[^\.]+)/, function($0,$1,$2){fname=$1;fext=$2});
  6.     if(!fso.FolderExists(fname))fso.CreateFolder(fname);
  7.     var text = fso.OpenTextFile(line, 1).ReadAll();
  8.     //指定字数量和分割的标点符号
  9.     var m = text.match(/[\s\S]{200,}?([。!?!\?]”|[。!?!\?\n])|[\s\S]+$/g);
  10.     s+='---------------------'+line+'---------------------\r\n';
  11.     WSH.echo('开始分割'+line+'……');
  12.     for(var i=0;i<m.length;i++){
  13.         var newfname = fname+'_'+(i+1)+fext;
  14.         fso.CreateTextFile(fname+'\\'+newfname, 2).Write(m[i]);
  15.         s+=newfname+'  '+m[i].length+'个字符\r\n';
  16.     }
  17.     WSH.echo('分割完成!共分成'+i+'个文件\r\n');s+='\r\n';
  18. }
  19. fso.CreateTextFile('分割记录.log', 2).Write(s);
  20. WSH.echo('Done');
复制代码





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