2012-02-13 12 views
6

मैं वेबसाइटों के एक सेट से समाचार लेख निकालने के लिए boilerpipe जावा लाइब्रेरी का उपयोग करने का प्रयास कर रहा हूं। यह अंग्रेजी में ग्रंथों के लिए बहुत अच्छा काम करता है, लेकिन विशेष पात्रों के साथ पाठ के लिए, उदाहरण के लिए, उच्चारण अंक (हिस्टोरिया) वाले शब्द, यह विशेष वर्ण सही तरीके से निकाले नहीं जाते हैं। मुझे लगता है कि यह एक एन्कोडिंग समस्या है।गैर-अंग्रेजी लेख निकालने के लिए बॉयलरपाइप का उपयोग

बॉयलरपाइप faq में, यह कहता है "यदि आप गैर-अंग्रेजी पाठ निकालते हैं तो आपको कुछ पैरामीटर बदलना पड़ सकता है" और फिर paper को संदर्भित करता है। मुझे इस पेपर में कोई समाधान नहीं मिला।

मेरा सवाल है, क्या बॉयलरपाइप का उपयोग करते समय कोई पैरामेट है जहां मैं एन्कोडिंग निर्दिष्ट कर सकता हूं? क्या आसपास जाने और पाठ को सही तरीके से प्राप्त करने का कोई तरीका है?

कैसे मैं पुस्तकालय का उपयोग कर रहा: (प्रथम URL के आधार पर प्रयास):

URL url = new URL(link); 
String article = ArticleExtractor.INSTANCE.getText(url); 

(दूसरे पर HTLM स्रोत कोड)

String article = ArticleExtractor.INSTANCE.getText(html_page_as_string); 

उत्तर

1

ठीक ओवरराइड कर सकते हैं देखते हैं, एक समाधान मिल गया। जैसे आंद्रेई ने कहा, मुझे कक्षा HTMLFecther को बदलना पड़ा, जो पैकेज de.l3s.boilerpipe.sax में है जो मैंने किया था, यूटीएफ -8 में किए गए सभी पाठों को परिवर्तित करने के लिए मैंने क्या किया था।

final byte[] data = bos.toByteArray(); //stays the same 
byte[] utf8 = new String(data, cs.displayName()).getBytes("UTF-8"); //new one (convertion) 
cs = Charset.forName("UTF-8"); //set the charset to UFT-8 
return new HTMLDocument(utf8, cs); // edited line 
1

ठीक है, मैं क्या देख से , जब आप इसका उपयोग करते हैं, तो लाइब्रेरी स्वचालित रूप से उपयोग करने के लिए एन्कोडिंग का चयन करेगा। HTMLFetcher स्रोत से:

public static HTMLDocument fetch(final URL url) throws IOException { 
    final URLConnection conn = url.openConnection(); 
    final String ct = conn.getContentType(); 

    Charset cs = Charset.forName("Cp1252"); 
    if (ct != null) { 
     Matcher m = PAT_CHARSET.matcher(ct); 
     if(m.find()) { 
      final String charset = m.group(1); 
      try { 
       cs = Charset.forName(charset); 
      } catch (UnsupportedCharsetException e) { 
       // keep default 
      } 
     } 
    } 

, उनके कोड थोड़ा डिबगिंग ArticleExtractor.getText(URL) के साथ शुरुआत करें, और यदि आप एन्कोडिंग

+0

आपके उत्तर के लिए धन्यवाद। मुझे अभी केवल ध्यान देने के लिए खेद है, लेकिन मैं एक और परियोजना में फंस गया हूं। मैंने कोड के इस खंड के बाद परिवर्तनीय सीएस पर सेट किया गया एन्कॉन्डिंग प्रिंट करने का प्रयास किया, और परिणाम हमेशा आईएसओ -885 9 -1 था। मैंने एन्कोडिंग को यूटीएफ -8 होने के लिए मजबूर करने की भी कोशिश की, लेकिन कोई बेहतर परिणाम नहीं मिला। समस्या किसी एक रूपांतरण में, HTMLDocument, टेक्स्ट डॉक्यूमेंट आदि में होनी चाहिए, लेकिन मुझे अपनी टेक्स्ट सामग्री प्रिंट करने में कुछ परेशानी हो रही है। कोई विचार? एक बार फिर धन्यवाद। –

+0

आंद्रेई, आप सही थे। मैं बहुत जटिल करने की कोशिश कर रहा था, लेकिन अंत में यह एक बहुत ही सरल समाधान था। फिर से धन्यवाद, मुझे खेद है कि मैं अभी तक आपको ऊपर नहीं उठा सकता। –

2

आप आंतरिक Boilerpipe वर्गों को संशोधित करने की जरूरत नहीं है: लाने समारोह के अंत में, मैं दो पंक्तियां जोड़ते हैं और पिछले एक बदलना पड़ा।

InputSource ऑब्जेक्ट ArticleExtractor.INSTANCE.getText() ऑब्जेक्ट पर उस ऑब्जेक्ट पर विधि और बल एन्कोडिंग को पास करें। उदाहरण के लिए:

URL url = new URL("http://some-page-with-utf8-encodeing.tld"); 

InputSource is = new InputSource(); 
is.setEncoding("UTF-8"); 
is.setByteStream(url.openStream()); 

String text = ArticleExtractor.INSTANCE.getText(is); 

सम्मान!

+1

सबसे पहले, अपने उत्तर पर टिप्पणी करने में इतनी देर लगने के लिए खेद है, और इसे देने के लिए धन्यवाद। दुर्भाग्य से यह मेरे लिए काम नहीं कर रहा है। मैंने अभी कोशिश की, और उच्चारण अंक वाले सभी अक्षर '?' बन गए जब मैं निकाले गए लेख को मुद्रित करता हूं। मैं अब के लिए पिछले समाधान के साथ रहूँगा। –

+0

बहुत धन्यवाद। आपने अरबी प्रदर्शित करने में मेरी समस्या तय की है –

0

मुझे कुछ समस्या थी; सीएनआर समाधान महान काम करता है। बस आईटीएफ -8 एन्कोडिंग को आईएसओ -885 9 -1 में बदलें। धन्यवाद के

URL url = new URL("http://some-page-with-utf8-encodeing.tld"); 
InputSource is = new InputSource(); 
is.setEncoding("ISO-8859-1"); 
is.setByteStream(url.openStream()); 

String text = ArticleExtractor.INSTANCE.getText(is); 
1

Boilerpipe के ArticleExtractor कुछ एल्गोरिदम हैं, जिन्हें विशेष अंग्रेजी के अनुरूप किया गया उपयोग करता है - औसत वाक्यांशों, आदि में शब्दों की संख्या को मापने के कम या ज्यादा अंग्रेजी के अलावा वर्बोज़ है कि किसी भी भाषा में (यानी: हर दूसरे भाषा) इन एल्गोरिदम कम सटीक होगा।

इसके अतिरिक्त, पुस्तकालय कुछ अंग्रेजी वाक्यांश का उपयोग करता है की कोशिश करने और लेख के अंत लगता है (टिप्पणी, एक टिप्पणी पोस्ट, अपनी बात कहें, आदि है) जो स्पष्ट रूप से अन्य भाषाओं में काम नहीं करेगा। बस पता है कि कुछ संशोधन की संभावना गैर अंग्रेजी भाषाओं में अच्छे परिणाम के लिए आवश्यक है हो -

यह कहना है कि पुस्तकालय एकमुश्त विफल हो जाएगा नहीं है।

1

जावा:

import java.net.URL; 

import org.xml.sax.InputSource; 

import de.l3s.boilerpipe.extractors.ArticleExtractor; 

public class Boilerpipe { 

    public static void main(String[] args) { 
     try{ 
      URL url = new URL("http://www.azeri.ru/az/traditions/kuraj_pehlevanov/"); 

      InputSource is = new InputSource(); 
      is.setEncoding("UTF-8"); 
      is.setByteStream(url.openStream()); 

      String text = ArticleExtractor.INSTANCE.getText(is); 
      System.out.println(text); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

} 

ग्रहण: भागो> भागो विन्यास> आम टैब। एन्कोडिंग को अन्य (यूटीएफ -8) पर सेट करें, फिर चलाएं क्लिक करें।

enter image description here

संबंधित मुद्दे