同一篇中文文章(文言),有两个版本,想找一个程序做差异对比,有没有什么现有的或相关的工具?
同时想要以下这些差异被忽略:
例如, 版本 1 ,都是简体字,且无标点,又有空格,每小句都换行
床 前 看 月 光
疑 是 地 上 霜
举 头 望 山 月
低 头 思 故 乡
版本 2
牀前明月光,疑是地上霜。
舉頭望明月,低頭思故鄉。
希望软件给出的对比结果是:
看<->明
山<->明
以上例子是五言,每一句字数一样。还需要比较每句字数不一样的文章
有没有什么现有的或相关的工具?
1
vacuitym 353 天前
这个自己实现起来应该比较容易,首先把两个都专程简体或者繁体,然后对符号也都转成一样的,然后直接对比差异
|
2
garywill OP 补充个难度更大点的例子。断句、复杂的标点。(甚至有中间缺失几句的)
版本 1 帝曰:「有其年已老而有子者,何也?」岐伯曰:「此其天壽過度,氣脈常通,而腎氣有餘也。此雖有子,男不過盡八八,女不過盡七七,而天地之精氣皆竭矣。」 版本 2 帝曰有其年已老而有子者何也 岐伯曰此其天壽過度氣脈常通而腎氣有餘也 此雖有子男不過盡八八女不過盡七七 而天地之精氣皆竭矣 |
3
superychen 353 天前
字数都一样么?问问 gpt 就能用 python 给你生成个代码
|
4
superychen 353 天前
```python
import opencc import re from difflib import SequenceMatcher PATTERN_CHINESE = re.compile(r'[\u4e00-\u9fa5]') CONVERTER = opencc.OpenCC("t2s") # 只保留中文 def clean(text): return ''.join(PATTERN_CHINESE.findall(text)) # 繁体转简体 def simplify(text): return CONVERTER.convert(text) # 比较文本 def compare_text(text1, text2): text1 = clean(text1) text2 = clean(text2) text1a = simplify(text1) text2a = simplify(text2) matcher = SequenceMatcher(None, text1a, text2a) diffs = matcher.get_opcodes() index = 0 for tag, i1, i2, j1, j2 in diffs: if tag == 'replace': index += 1 print(f'{index}. {text1[i1:i2]} <-> {text2[j1:j2]}') # 简体转繁体 simplified_text = '''床 前 看 月 光 疑 是 地 上 霜 举 头 望 山 月 低 头 思 故 乡''' traditional_text = '''牀前明月光,疑是地上霜。 舉頭望明月,低頭思故鄉。''' compare_text(simplified_text,traditional_text) ``` |
5
geelaw 353 天前 1
可以用编辑距离建模。
准备工作:找一本字典,记住所有的标点、空白、汉字,以及同一个字的不同写法(简体繁体异体字)。 1. 两个字符串都删除所有的标点空白,只留汉字。 2. 计算编辑距离最小的编辑:把一个字替换为它的其他写法、删除一个字、增加一个字的代价可以都设置为 1 (这样的话把一个字改成和它没关系的另一个字的代价就是 2 )。 第二步是标准的动态规划问题。 |
6
superychen 353 天前
|