Прежде всего, я хочу извиниться за свой плохой английский. У меня есть 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))
Я не думаю, что я индексирую документы со следующим идентификатором документов, но я не знаю, почему первый документ тоже не индексируется




Это не похоже на проблему с индексацией или люценом. Я думаю, есть проблема, как вы читаете эти данные и разделяете их.
Я бы рекомендовал использовать apache tika для извлечения данных html. Это очень полезно. См. https://tika.apache.org/
Я добавил обработку исключений, но проблема не исчезла. Что вы предлагаете для чтения данных?
Я не уверен, как ваша структура должна выглядеть в конце. вы хотите добавить все теги .T в один документ или хотите, чтобы каждая статья была представлена в указателе, как один документ включает .I .T .A .W .X?
Я хочу, чтобы каждая статья была представлена в указателе, как будто один документ включает .I .T .A .W .X, это то, что я пытаюсь сделать в своем коде
я обновил свой ответ. Я думаю, вам следует использовать apache tika для извлечения html. так что вам не нужно беспокоиться обо всех этих вещах, связанных с разделением строк.
Я вынужден использовать Lucene, это школьный проект, и меня бьют больше недели x)
вам нужно использовать lucene для индексации, apache tika - это просто дополнительная структура, помогающая извлекать индексируемые данные из html. взглянуть. это стоит того!
Позвольте нам продолжить обсуждение в чате.
Название и автор, вероятно, должны использовать
TextField. Кроме того, я не совсем уверен, что понимаю формат, но мне кажется, что вы пишете каждый документ с идентификатором из следующего документа.