java DiffUtils +HanLP分词 实现文字差异对比

下面是两段文字的差异对比方法,使用了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(""
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值