标题: 【放弃】80元求修改xhtml之二 [打印本页]
作者: lxh623 时间: 2023-4-18 16:31 标题: 【放弃】80元求修改xhtml之二
本帖最后由 lxh623 于 2023-4-26 09:11 编辑
http://www.bathome.net/thread-65828-1-1.html
修改一下。直接的办法可能不行。
我这里有两个文件夹。一个是“梵文”,一个是“epub解包后”。后者包含许多文件夹。前者里面是几百个文件,比如,F28n1071_005.xhtml 。它的"text_3">(.{1})提取汉字,写入文本F28n1071_005.txt。而对应有个“J:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”,里面一定有005.xhtml,它的"text_3">后面有可能是多个汉字(1-7个,参考上传的同音字txt),而且总数多半少一些。我想,按照F28n1071_005.txt的顺序修改005.xhtml,留下一个汉字。修改的行,文本F28n1071_005.txt留下空行。没有的就原位留下。
主要是解决同音字的问题(相同罗马字标注),同时有助于手动找出没有标注"text_3"的罗马字。
感觉复杂,但是,也许能够做到吧。
谢谢!
作者: newswan 时间: 2023-4-19 11:03
回复 1# lxh623 - function getDic() {
- param(
- [string]$filename
- )
- $f1 = Get-Content -Encoding UTF8 ( $filename + ".xhtml" )
- $f2 = $f1 -join "`n"
- $f3 = $f2 -replace '(<span class="text_3">[^<>]+</span><span class="text_1">[(][^()]+[)]</span>)',"`n`$1`n" -split "`n"
- $f4 = $f3 -match "text_3"
- $f5 = $f4 -replace "<[^<>]+>",""
- $f5 | Out-File -Encoding utf8 ( $filename + ".txt" )
- }
-
- getDic ".\juans\F28n1071_005"
- getDic ".\juans\005"
复制代码
提取 text_3 text_1 里的字符
怎么替换 005 没明白
作者: lxh623 时间: 2023-4-19 12:35
回复 2# newswan
没有明白,怎么有批处理?
谢谢!
如果手工修改,我的意思是提取文字。然后,五个一组去对001.xhtml。多个汉字那种,删除多余的汉字。
比如,F28n1071_003。
提取"text_3">(.{1}),也就是代码后面一个汉字,到文本F28n1071_003。
打开“J:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”的003.xhtml,提取"text_3">(.{1,7})</span>,也就是中间的几个汉字,到文本003 。
第一个文本前面五行是:
吐
蒤
湀
夸
叻
第二个文本前面五行是:
吐
由蒤
湀
夸慔
叻粺
对应的行都包含,那么,到003.xhtml把第二个<span class="text_3">由蒤</span>换成<span class="text_3">蒤</span>。
第四第五类似。
但是,第二个文本会少一些,因为特征字符串不足,梵文没有替换完全,希望检查之后手动添加。
作者: newswan 时间: 2023-4-19 12:56
用 xx_00x 里的- <span class="text_3">[^<>]+</span>
复制代码
替换
00x 里的- <span class="text_3">[^<>]+</span>
复制代码
按顺序,5个一组
作者: zaqmlp 时间: 2023-4-19 13:38
- <# :
- cls&echo off&cd /d "%~dp0"&mode con lines=5000&rem bat存为ANSI/GB2312编码
- path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
- pause
- exit
- #>
- $folder1="D:\大藏经修改\梵文";
- $folder2="D:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans";
- if(-not (test-path -literal $folder1)){write-host ('"'+$folder1+'" path error or not exist');exit;}
- if(-not (test-path -literal $folder2)){write-host ('"'+$folder2+'" path error or not exist');exit;}
- $enc=New-Object System.Text.UTF8Encoding $False;
- $files=@(dir -literal $folder1|?{('.xhtml' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- if($files.length -ge 1){
- for($i=0;$i -lt $files.length;$i++){
- write-host $files[$i].FullName -ForegroundColor yellow;
- $arr=New-Object -TypeName System.Collections.ArrayList;
- $text1=[IO.File]::ReadAllText($files[$i].FullName, $enc);
- $m1=[regex]::matches($text1, 'class="text_3">([^<]+)');
- $m2=[regex]::match($files[$i].Name, '(?i)_([0-9]+\.xhtml)$');
- if($m2.Success){
- $juansfile=$folder2.trimend('\')+'\'+$m2.groups[1].value;
- if(test-path -literal $juansfile){
- write-host $juansfile -ForegroundColor yellow;
- $global:n=0
- $text2=[IO.File]::ReadAllText($juansfile, $enc);
- $text2=[regex]::replace($text2, 'class="text_3">([^<]+)', {
- param($m3);
- $str=$m3.groups[0].value;
- if($global:n -lt $m1.count){
- if($m3.groups[1].value.Contains($m1[$global:n].groups[1].value)){
- $str=$m1[$global:n].groups[0].value;
- [void]$arr.add('');
- write-host ($m1[$global:n].groups[1].value+' --> '+$m3.groups[1].value);
- }else{
- [void]$arr.add($m1[$global:n].groups[1].value);
- }
- }
- $global:n++;
- return $str;
- });
- [IO.File]::WriteAllText($juansfile, $text2, $enc);
- }else{write-host ('"'+$juansfile+'" not exist');}
- }
- for($j=$global:n;$j -lt $m1.count;$j++){
- [void]$arr.add($m1[$j].groups[1].value);
- }
- $outfile=$folder1.trimend('\')+'\'+$files[$i].BaseName+'.txt';
- [IO.File]::WriteAllLines($outfile, $arr, $enc);
- write-host '';
- }
- }else{write-host ('no xhtmlfile in "'+$folder1+'"');}
复制代码
作者: lxh623 时间: 2023-4-19 13:48
zaqmlp 发表于 2023-4-19 13:38
我上传文件夹名和文件名的两个文件。能不能完善一点点。谢谢!
作者: zaqmlp 时间: 2023-4-19 14:00
回复 6# lxh623
不清楚你的实际目录结构是怎样,你原来网盘上传的跟现在说明的完全不符,你要么就按我写的目录结构,要么就重新整理打包上传
作者: lxh623 时间: 2023-4-19 14:21
回复 7# zaqmlp
梵文文件夹,和解包后的压缩文件,已经上传。谢谢!
作者: zaqmlp 时间: 2023-4-19 14:30
本帖最后由 zaqmlp 于 2023-4-19 14:31 编辑
回复 8# lxh623
怎么知道“梵文”文件夹里哪些xhtml是跟“F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”里的xhtml对应呀?!需求要说清楚,而不是让人来猜
作者: newswan 时间: 2023-4-19 16:33
本帖最后由 newswan 于 2023-4-19 16:42 编辑
"\梵文\${key}_00x.xhtml" "\${epub解包}\juans\00x.xhtml" 两个文件夹里面的文件怎么对应的?
比如 "\梵文\F28n1071_003.xhtml" 和 哪个 "\${epub解包}\juans\003.xhtml" 对应的?
${epub解包} 的实际名字是 "F1071 釋教最上乘秘密藏陀羅尼集" ,怎么和 F28n1071 对应上?
要么把对应的文件放一起,打包
而且,2楼对应两个文件,过滤后,行数不同
作者: lxh623 时间: 2023-4-19 20:22
本帖最后由 lxh623 于 2023-4-19 20:26 编辑
回复 9# zaqmlp
四位数确定的。前面两个是序号。就是B07n0023_003等等,第二位到第四位可以删除,B0023_003。或者我事先重新命名。
谢谢!
作者: zaqmlp 时间: 2023-4-19 21:24
回复 11# lxh623
还是没说清楚,比如T18n0894_001.xhtml、T18n0894a_001.xhtml、T18n0894b_001.xhtml,都是对应同一个“T0894 xxxxx”文件夹下OEBPS\juans里的001.xhtml吗?!
作者: lxh623 时间: 2023-4-21 07:28
本帖最后由 lxh623 于 2023-4-21 07:41 编辑
T18n0894_001.xhtml没有这个。我不是上传了吗。
麻烦了。
文件名我全部重新修改了。- B0023_003.xhtml
- D9025_001.xhtml
- D9025_003.xhtml
- F1071_001.xhtml
复制代码
作者: lxh623 时间: 2023-4-21 07:57
本帖最后由 lxh623 于 2023-4-21 16:45 编辑
试了一下,好像没有达成目的。
例如,F1071_003.txt第14行,003.txt里面没有,就用F1071_003.txt第15行的字到003.txt第14行匹配,如果相同,就跳过;如果有多个汉字而且包含这个汉字,就继续修改003.xhtml。
能不能把两个文本的行和xhtml对应的"text_3">(.{1,7})</span>,虚拟编号?每一次增加一个序号。
另外一个思路。
修改多个汉字为一个。
F1071_003.xhtml提取"text_3">(.{1})</span>到F1071_003.txt。003.xhtml提取"text_3">(.{2,7})</span>到003.txt,003.txt删除重复行。
我在EmEditor用 [仕狿箘]筛选F1071_003.txt,只有一个汉字。那么,003.xhtml中全部"text_3">仕狿箘改为"text_3">仕。
但是,这一步怎么用批处理做到。是用003.txt同一行的2-7个汉字一个一个去搜索F1071_003.txt,如果搜索到只有一个相同的汉字,那么就这样修改。如果一个文档有两个不同汉字的结果,暂时不修改。最后,删除003.txt。
作者: lxh623 时间: 2023-4-24 16:50
本帖最后由 lxh623 于 2023-4-24 17:01 编辑
一直没有答案,请允许我重新描述一下问题。
这里有两个文件夹。一个是“梵文”,一个是“epub解包后”。后者包含许多文件夹。前者里面是几百个文件,文件名如13楼。符号_前面的字符,是在“epub解包后”里面的子文件夹的名称前面的字符。
首先,从“梵文”中的文件提取字符,比如从B0023_003.xhtml中,提取<span class="text_3">(.{1,2})</span><span class="text_1">\((.{1,9})\)</span>,得到\1\t\2,写入文本B0023_003.txt。删除重复行。
然后到epub解包后\B0023 金剛般若波羅蜜經講義\OEBPS\juans中的003.xhtml中提取<span class="text_3">(.{2,7})</span><span class="text_1">\((.{1,9})\)</span>,得到\1\t\2,写入文本003.txt。删除重复行。
B0023_003.xhtml和相应子文件夹的003.xhtml是唯一的对应文件。
然后,B0023_003.txt和003.txt的每一行可以分别定义为^(.*)\t(.*)$。003.txt的\t后面部分(即\2)如果在B0023_003.txt是唯一的【严格意义上,\t\2$去搜索B0023_003.txt】,就在003.xhtml中,用B0023_003.txt这一行\t前面部分替换003.txt的\t前面部分。
如果不是唯一,就跳过。
谢谢!
作者: lxh623 时间: 2023-4-26 09:11
放弃。因为epub解包的原件与xml或者大藏经相比,字符顺序有严重问题。
可能xml转html,再来处理,才行。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |