下面是两段文字的差异对比方法,使用了com.github.difflib.DiffUtils用来对比差异
和HanLP分词(分词我用了自己的);
先对比段落差异,然后把段落分词再对比文字的差异
分词我自己写了个按句子分,如果要颗粒度小的,就用分词器分 看需求,然后使用比较器比较;
输出拼接html标签来显示差分
/**
* @param originalStr 初始的
* @param revisedStr 修订过的
*/
private HashMap<String, String> contrastDiff(String originalStr, String revisedStr) {
/*
// HanLP分词
Segment segment = HanLP.newSegment()
.enableAllNamedEntityRecognize(true)
.enableNumberQuantifierRecognize(true)
.enableOffset(true);
List<Term> termList0 = segment.seg(originalStr);
List<Term> termList1 = segment.seg(revisedStr);
List<String> collect0 = termList0.stream().map(term -> term.word).collect(Collectors.toList());
List<String> collect1 = termList1.stream().map(term -> term.word).collect(Collectors.toList());
*/
List<String> collect0 = myParticiple(originalStr);
List<String> collect1 = myParticiple(revisedStr);
// 对比差分
Patch<String> patch = DiffUtils.diff(collect0, collect1, true);
List<AbstractDelta<String>> deltas = patch.getDeltas();
HashMap<String, String> resultMap = new HashMap<>();
StringBuilder sourceHtml = new StringBuilder();
StringBuilder targetHtml = new StringBuilder();
HashSet<DeltaType> typeSet = new HashSet<>();
for (AbstractDelta<String> delta : deltas) {
typeSet.add(delta.getType());
String targetStr = String.join(""