سؤال

أحاول تحليل محتوى قاعدة بيانات Drupal لأغراض الاستخبارات الجماعية.

حتى الآن، تمكنت من العمل مثالا بسيطا يقوم ببطاقة المحتويات المختلفة (مشاركة المنتدى بشكل رئيسي) وعدد الرموز بعد إزالة كلمات التوقف.

ال StandardTokenizer يجب أن تكون المقدمة مع Lucene قادرة على تزيين أسماء HostNames وإرسال رسائل البريد الإلكتروني ولكن المحتوى يمكن أن يكون له أيضا HTML أيضا، على سبيل المثال:

Pubblichiamo la presentazione di IBM riguardante DB2 per i vari sistemi operativi
Linux, UNIX e Windows.\r\n\r\nQuesto documento sta sulla piattaforma KM e lo potete
scaricare a questo <a href=\'https://sfkm.griffon.local/sites/BSF%20KM/BSF/CC%20T/Specifiche/Eventi2008/IBM%20DB2%20for%20Linux,%20UNIX%20e%20Windows.pdf\' target=blank>link</a>.

يتم تخصيص هذا بشكل سيء بهذه الطريقة:

pubblichiamo -> 1
presentazione -> 1
ibm -> 1
riguardante -> 1
db2 -> 1
vari -> 1
sistemi -> 1
operativi -> 1
linux -> 1
unix -> 1
windows -> 1
documento -> 1
piattaforma -> 1
km -> 1
potete -> 1
scaricare -> 1
href -> 1
https -> 1
sfkm.griffon.local -> 1
sites -> 1
bsf -> 1
20km/bsf -> 1
cc -> 1
20t/specifiche/eventi2008/ibm -> 1
20db2 -> 1
20for -> 1
20linux -> 1
20unix -> 1
20e -> 1
20windows.pdf -> 1
target -> 1
blank -> 1
link -> 1

ما أود الحصول عليه هو الحفاظ على الروابط معا وشريط علامات HTML (مثل <pre> أو <strong>) أن عديمة الفائدة.

هل يجب أن أكتب مرشحا أو مملوكا مختلفا؟ يجب أن يحل الملامح محل المعيار واحد أو هل يمكنني مزجها معا؟ أصعب طريقة هي أن تأخذ StandardTokenizerImpl ونسخه في ملف جديد، ثم أضف سلوكا مخصصا، لكنني لا أرغب في التنفيذ في لوسين الآن (التعلم تدريجيا).

ربما هناك بالفعل شيء مشابه تنفيذ لكنني لم أتمكن من العثور عليه.

تعديل:انظر الى StandardTokenizerImpl يجعلني أعتقد أنه إذا اضطررت إلى تمديده عن طريق تعديل التنفيذ الفعلي فهذا غير مناسب جدا مقارنة باستخدام ليكس أو ثني والقيام بذلك بنفسي ..

هل كانت مفيدة؟

المحلول

يتم تحقيق ذلك بسهولة من خلال معالجة النص قبل إعطائها إلى Lucene To Tokenize. استخدام محلل HTML، مثل أريحا لتحويل المحتوى الخاص بك إلى نص مع عدم وجود HTML عن طريق تجريد العلامات التي لا تهتم بها، واستخراج النص من تلك التي تقوم بها. أريحا TextExtractor. مثالي لهذا، وسهل الاستخدام.

String text = "Pubblichiamo la presentazione di IBM riguardante DB2 per i vari sistemi operativi"
    +"Linux, UNIX e Windows.\r\n\r\nQuesto documento sta sulla piattaforma KM e lo potete"
    +"scaricare a questo <a href=\'https://sfkm.griffon.local/sites/BSF%20KM/BSF/CC%20T/Specifiche/Eventi2008/IBM%20DB2%20for%20Linux,%20UNIX%20e%20Windows.pdf\' target=blank>link</a>.";

TextExtractor te = new TextExtractor(new Source(text)){
    @Override
    public boolean excludeElement(StartTag startTag) {
        return startTag.getName() != HTMLElementName.A;
    }
};
System.out.println(te.toString());

هذا المخرجات:

Pubblichiamo La Presentazione دي IBM Riguardante DB2 PER I VARI SISTEMI Operativilinux، UNIX E Windows. Questo Documento Sta Sulla Piattaforma KM E LO PARTESCARICARE رابط Questo.

يمكنك استخدام Tokenizer Lucene مخصص مع مرشح HTML، لكنه ليس هو الحل الأسهل - باستخدام Jericho سيقوم Defn بحفظ وقت التطوير لهذه المهمة. ربما لا ترغب محلل HTML الموجود ل Lucene في القيام بالضبط ما تريد، كما سيبقي كل النص على الصفحة. التحذير الوحيد لهذه هو أنه سينتهي بك الأمر بمعالجة النص مرتين، بدلا من كل دفق واحد، ولكن ما لم تقم بتعامل مع Terabytes من البيانات، فأنت ستعمل على اعتبار هذا الاعتبار الأداء، والتعامل مع الأداء هو أفضل شيء تركك اجعل تطبيقك جسز وحدده كأقضية على أي حال.

نصائح أخرى

بشكل عام، عند فهرسة المستندات التي تحتوي على علامات HTML مع Lucene، يجب عليك أولا تحليل HTML في تمثيل نصي مع الأجزاء التي تريد مغادرتها، وفقط إطعامها فقط إلى المفهرز للمهتمين.

يرى JGuru: كيف يمكنني فهرسة مستندات HTML؟ للحصول على أسئلة وأجوبة شرح المزيد من كيفية القيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top