Generación de resumen más corta

Generación de resumen más corta

Descripción del título:
    escriba las primeras 4 palabras del nombre del blog "El método de estructura" en el cuadro de búsqueda de Baidu o Google y podrá ver el enlace a este blog en la primera opción. El resultado de la búsqueda es "El método de algoritmo de estructura- "hay un texto descriptivo en:" canal de blog -CSDN.NET programador entrevista, algoritmo, programación, arte, árbol clásico rojo-negro cuatro aspectos destacados y resumen de la serie original: algoritmo de ley estructuras de julio ..., "nosotros Este texto se denomina resumen de ese resultado de búsqueda, que es el resumen más corto. Nuestra pregunta es, ¿cómo se generó este resumen más corto?
Análisis e ideas: el
    título es conocido, nuestro objetivo es encontrar la cadena que contiene el resumen más corto en una matriz que contiene palabras clave, hay 4 pasos en total :
        Paso 1, guarda todas las palabras clave en un mapa, se usa para ver la posición de la palabra clave en el párrafo paso 2
        , compara cada palabra clave por turno, marca la posición donde aparece, si se encuentra la misma palabra clave, actualiza lo siguiente Marque el paso 3
        , si se encuentran todas las palabras clave (la cantidad de índices guardados es igual a la cantidad de palabras clave), calcule la longitud de la cadena, si es menor que min, reemplace el valor de min y coloque la cadena al principio del párrafo original. Guarde la posición final para el resultado final y compare el paso 4
        , repita el proceso anterior hasta que se complete el párrafo original. . .

import java.util.*;
import static java.util.Collections.sort;
public class main2 {
    
    
    public static void main(String[] args) {
    
    
        String keyword[] = {
    
     "微软", "计算机", "亚洲" ,"交流"};
        String description[] = {
    
    
                "微软", "亚洲", "研究院", "成立", "于", "1998", "年", ",", "我们", "的", "使命",
                "是", "使", "未来", "的", "计算机", "能够", "看", "、", "听", "、", "学", ",",
                "能", "用", "自然语言", "与", "人类", "进行", "交流", "。", "在", "此", "基础", "上",
                ",", "微软", "亚洲", "研究院", "还", "将", "促进", "计算机", "在", "亚太", "地区",
                "的", "普及", ",", "改善", "亚太", "用户", "的", "计算", "体验", "。", "”"};
        //方便查看运行结果
        for (String s : keyword) {
    
    
            System.out.print(s+" ");
        }
        System.out.println();
        minText(description,keyword);
    }
    static void minText(String[] per,String[]keys){
    
    
        Map<String,Integer> map=new HashMap();
        //index中存放关键字的下标
        ArrayList<Integer> index=new ArrayList();
        int min=Integer.MAX_VALUE;
        int start=-1;
        int end=-1;
        //初始化将每个关键字的值都设置为-1
        for (int i = 0; i < keys.length; i++) {
    
    
            map.put(keys[i],-1);
        }
        for (int i = 0; i < per.length; i++) {
    
    
            String word=per[i];
            //判断该字符串是否在map
            if(map.containsKey(word)){
    
    
                //如果包含该字符串,得到该字符串的下标
                int k = map.get(per[i]);
                //比较index看其中是否包含该下标,如果包含更新其下标,否则将该下标添加index中
                if (index.contains(k))
                    index.remove(index.indexOf(k));
                index.add(i);
                //更新字符串的下标
                map.put(per[i],i);
                //更新完成后判断是否所有关键字被囊括其中
                if(index.size()==keys.length){
    
    
                    //然后比较看是否是最短
                    int[]temp=getlength(index);
                    if(min>temp[0]){
    
    
                        min=temp[0];
                        //保存最短摘要的开始的下标,结束的下标
                        start=temp[1];
                        end=temp[2];
                    }
                    continue;
                }
            }
        }
        //输出找到的最短摘要
        for (int i = start; i <=end; i++) {
    
    
            System.out.print(per[i]);
        }
    }
    private static int[] getlength(ArrayList<Integer>index) {
    
    
        //四个关键字出现的下标顺序不一定是有序的
        sort(index);
        //得到开始的那个下标
        int start=index.get(0);
        //得到结束的那个下标
        int end=index.get(index.size()-1);
        return new int[]{
    
    end-start+1,start,end};
    }
}

Los resultados del programa son los siguientes:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_45731083/article/details/105318251
Recomendado
Clasificación