HTML-файл Lucene index с идентификаторами - PullRequest
0 голосов
/ 16 мая 2018

Прежде всего, я хочу извиниться за мой плохой английский.У меня есть HTML-файл с именем cacm.html с большим количеством документов, каждый документ структурирован следующим образом:

.I indicates article identifier
.T idicates article title
.A indicates article authors
.W indicates article resume
.X indicates article references

Вот пример статьи:

.I 20
.T
Accelerating Convergence of Iterative Processes
.W
A technique is discussed which, when applied
to an iterative procedure for the solution of
an equation, accelerates the rate of convergence if
the iteration converges and induces convergence if
the iteration diverges.  An illustrative example is given.
.B
CACM June, 1958
.A
Wegstein, J. H.
.N
CA580602 JB March 22, 1978  9:09 PM
.X
20  5   20
20  5   20
20  5   20

я написал этот код:

    //IMPORTS

Public class in{
    public static void main(String[] args) throws IOException{  
    Path p = Paths.get("C:\\Users\\pc\\Desktop\\indexationeclipc", args);       
    StandardAnalyzer analyzer = new StandardAnalyzer();
    Directory directory = FSDirectory.open(p);
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    IndexWriter iwriter = new IndexWriter(directory, config);

    BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\pc\\Desktop\\index\\cacm.htm"));

    boolean lire=false;

    String[] fields = new String[5];
    for (int i = 0; i < fields.length; i++) {
        fields[i] = "";
    }
    int fieldno = 0;

    String line=br.readLine();
    while(line!=null) {
        if(line.startsWith(".I")) {


            String[] parts = line.split(" ");
            fields[0] = parts[1];
            fieldno = 0;



            if (!fields[0].equals("")) {
               Document doc=new Document();
               Field I= new StringField("I",fields[0],Field.Store.YES);
               doc.add(I);

               Field T= new StringField("T",fields[1],Field.Store.YES);
               doc.add(T);

               Field A= new StringField("A",fields[2],Field.Store.YES);
               doc.add(A);

               Field W= new TextField("W",fields[3],Field.Store.YES);
               doc.add(W);

               Field X= new TextField("X",fields[4],Field.Store.YES);
               doc.add(X);

               iwriter.addDocument(doc);

            }

             for (int i = 0; i < fields.length; i++) {
                 fields[i] = "";
             }


        }


        else if(line.startsWith(".T")) {
            lire=true;
            fieldno = 1;

        }

        else if(line.startsWith(".A")) {
            lire=true;
            fieldno = 2;
        }

        else if(line.startsWith(".W")) {
            lire=true;
            fieldno = 3;
        }

        else if(line.startsWith(".X")) {
            lire=true;
            fieldno = 4;
        }

        else if(line.startsWith(".")) {
            lire=false;
        }

        if((fieldno > 0) && (fieldno < 5)) {
            if(lire==true) {
            if (line.length() > 2) {
                fields[fieldno] += " " + line;
            }}
        }

        line = br.readLine();       

    }


br.close();
iwriter.close();


    }       
}

Но индексация не заканчивается, индексация останавливается и индексируются не все термины, и он индексирует тысячу раз одно и то же слово, а иногда он индексирует ВСЕ фразы не только термины :( x))

1 Ответ

0 голосов
/ 17 мая 2018

Это не похоже на проблему индексации или люцена.Я думаю, есть проблема, как вы читаете эти данные и разделяете их.

Я бы порекомендовал использовать Apache Tika для извлечения данных HTML.Это довольно полезно.Смотри https://tika.apache.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...