के साथ टीएफ-आईडीएफ वैक्टर निकालें मैंने ल्यूसीन का उपयोग करके दस्तावेजों का एक सेट अनुक्रमित किया है। मैंने प्रत्येक दस्तावेज़ सामग्री के लिए DocumentTermVector भी संग्रहीत किया है। मैंने एक कार्यक्रम लिखा और प्रत्येक दस्तावेज़ के लिए आवृत्ति वेक्टर शब्द मिला, लेकिन मैं प्रत्येक दस्तावेज़ के टीएफ-आईडीएफ वेक्टर कैसे प्राप्त कर सकता हूं?लुसीन
Directory dir = FSDirectory.open(new File(indexDir));
IndexReader ir = IndexReader.open(dir);
for (int docNum=0; docNum<ir.numDocs(); docNum++) {
System.out.println(ir.document(docNum).getField("filename").stringValue());
TermFreqVector tfv = ir.getTermFreqVector(docNum, "contents");
if (tfv == null) {
// ignore empty fields
continue;
}
String terms[] = tfv.getTerms();
int termCount = terms.length;
int freqs[] = tfv.getTermFrequencies();
for (int t=0; t < termCount; t++) {
System.out.println(terms[t] + " " + freqs[t]);
}
}
वहाँ Lucene में किसी भी buit में समारोह मुझे ऐसा करने के लिए है:
यहाँ मेरी कोड है कि प्रत्येक दस्तावेज़ में अवधि आवृत्तियों आउटपुट है?
कोई भी मदद की, और मैं अपने आप को द्वारा यह किया:
Directory dir = FSDirectory.open(new File(indexDir));
IndexReader ir = IndexReader.open(dir);
int docNum;
for (docNum = 0; docNum<ir.numDocs(); docNum++) {
TermFreqVector tfv = ir.getTermFreqVector(docNum, "title");
if (tfv == null) {
// ignore empty fields
continue;
}
String tterms[] = tfv.getTerms();
int termCount = tterms.length;
int freqs[] = tfv.getTermFrequencies();
for (int t=0; t < termCount; t++) {
double idf = ir.numDocs()/ir.docFreq(new Term("title", tterms[t]));
System.out.println(tterms[t] + " " + freqs[t]*Math.log(idf));
}
}
वहाँ किसी भी तरह से प्रत्येक शब्द का आईडी नंबर मिल रहा है?
कोई भी मदद की, और मैं फिर से अपने आप से यह किया:
List list = new LinkedList();
terms = null;
try
{
terms = ir.terms(new Term("title", ""));
while ("title".equals(terms.term().field()))
{
list.add(terms.term().text());
if (!terms.next())
break;
}
}
finally
{
terms.close();
}
int docNum;
for (docNum = 0; docNum<ir.numDocs(); docNum++) {
TermFreqVector tfv = ir.getTermFreqVector(docNum, "title");
if (tfv == null) {
// ignore empty fields
continue;
}
String tterms[] = tfv.getTerms();
int termCount = tterms.length;
int freqs[] = tfv.getTermFrequencies();
for (int t=0; t < termCount; t++) {
double idf = ir.numDocs()/ir.docFreq(new Term("title", tterms[t]));
System.out.println(Collections.binarySearch(list, tterms[t]) + " " + tterms[t] + " " + freqs[t]*Math.log(idf));
}
}
लेकिन सभी शर्तों को क्रमबद्ध किया गया है और एक सूचकांक (उनके आदेश) में एक अद्वितीय संख्या है! मैं प्रत्येक शब्द के लिए उस नंबर तक कैसे पहुंच सकता हूं? – orezvani
मैंने इस भाग को हल किया था! – orezvani
यदि आपकी अनुक्रमणिका स्थिर है (आप आरंभिक बैच इंडेक्स के बाद अधिक दस्तावेज़ नहीं जोड़ते हैं) तो आप इस सॉर्ट किए गए ऑर्डर को टर्म आईडी के रूप में उपयोग कर सकते हैं। पहला शब्द, आईडी: 0, दूसरा शब्द, आईडी: 1, एक ऐसा ... यदि टर्म आईडी की आवश्यकता लुसीन के बाहर है, तो आप इसके बाहर इस आईडी भी बना सकते हैं। नियमों को दोहराएं और उन्हें ल्यूसीन से अलग से अपने संबंधित असाइन किए गए (आईडी) आईडी के साथ स्टोर करें। –