2011-08-28 8 views
7

यदि आपको पृष्ठ के मुख्य पाठ की पहचान करना है (उदा। पोस्ट की सामग्री की पहचान करने के लिए ब्लॉग पेज पर) आप क्या करेंगे? ऐसा करने का सबसे आसान तरीका आपको क्या लगता है?पृष्ठ की मुख्य सामग्री को पहचानने के तरीके पर कोई विचार?

  1. cURL
  2. साथ पेज सामग्री प्राप्त हो सकता है कि एक डोम पार्सर का उपयोग ऐसा लगता है कि सबसे अच्छा जवाब है, "यह निर्भर करता है" पेज

उत्तर

6

यह एक बहुत कठिन काम है लेकिन मैं डोम तत्वों के अंदर रिक्त स्थान की गणना करके शुरू करूंगा। मानव-पठनीय सामग्री का एक बताने वाला संकेत रिक्त स्थान और अवधि है। अधिकांश लेख पैराग्राफ टैग में सामग्री को समाहित करते हैं, इसलिए आप एन स्पेस के साथ सभी पी टैग देख सकते हैं और कम से कम एक विराम चिह्न चिह्न देख सकते हैं।

आप तत्व के अंदर समूहीकृत अनुच्छेद टैग की मात्रा का भी उपयोग कर सकते हैं .. तो यदि किसी div में एन पैराग्राफ बच्चे हैं, तो यह उस सामग्री को बहुत अच्छी तरह से हो सकता है जिसे आप निकालना चाहते हैं।

+0

दिलचस्प विचार एक JRuby संस्करण एक शुद्ध माणिक कार्यान्वयन Ruby Boilerpipe भी में मूल boilerpipe जावा कोड पोर्ट किया है। निश्चित रूप से ऐसा कुछ नहीं जो मैंने तुरंत सोचा होगा ...:] –

+0

मैंने इस बारे में सोचा, मैंने माता-पिता द्वारा अनुच्छेदों को समूहबद्ध करने की कोशिश की। लेकिन व्यवहार में, अन्य पैराग्राफ हो सकते हैं जो मुख्य कंटेनर से विचलित हो सकते हैं। – Andrew

+0

उस स्थिति में, आपको शायद कंटेनर के नाम/आईडी पर किसी प्रकार की ह्युरिस्टिक का उपयोग करना होगा। क्या आपके पास उल्लेख किए गए उदाहरण का यूआरएल है? –

1

के तत्वों की पहचान के लिए। जैसा कि, यह इस बात पर निर्भर करता है कि प्रश्न में साइट कैसे चिह्नित की जाती है।

  1. लेखक "आम" टैग का उपयोग करता है, तो आप एक कंटेनर तत्व "सामग्री" या के रूप में ID'd के लिए दिखाई दे सकता है "मुख्य।"
  2. यदि लेखक HTML5 का उपयोग कर रहा है, तो आपको सिद्धांत में <article> तत्व के लिए क्वेरी करने में सक्षम होना चाहिए, अगर यह केवल एक "कहानी" वाला पृष्ठ है।
0

यह पृष्ठ पर बहुत अधिक निर्भर करता है। क्या आप पहले से पृष्ठ की संरचना के बारे में कुछ भी जानते हैं? यदि आप भाग्यशाली हैं, तो यह एक आरएसएस फ़ीड प्रदान कर सकता है जिसका आप उपयोग कर सकते हैं या इसे <article>, <section> आदि जैसे कुछ नए HTML5 टैग्स के साथ चिह्नित किया जा सकता है (जो carry more semantic power than pre-HTML5 tags)।

6

कुछ ढांचे हैं जो इसे संग्रहीत कर सकते हैं, उनमें से एक http://code.google.com/p/boilerpipe/ है जो कुछ आंकड़ों का उपयोग करता है। कुछ विशेषताएं है कि मुख्य सामग्री के साथ एचटीएमएल ब्लॉक का पता लगाने कर सकते हैं:

  1. पी, div टैग के अंदर पाठ की
  2. राशि/बाहर
  3. लिंक/बाहर (यानी मुनस निकालने के लिए) के अंदर
  4. कुछ सीएसएस की राशि वर्ग के नाम और आईडी सामग्री के अंदर शीर्षक और पाठ के बीच
  5. संबंध (frequntly उन ब्लॉक मुख्य, main_block, सामग्री आदि के साथ कक्षाएं या आईडी है)
2

आप सोच सकते हैं:

  • Boilerpipe: अव्यवस्था "(बॉयलरप्लेट, टेम्पलेट्स) एक वेब पेज के मुख्य पाठ्य सामग्री के आसपास" boilerpipe पुस्तकालय का पता लगाने और अधिशेष दूर करने के लिए एल्गोरिदम प्रदान करता है "। लाइब्रेरी पहले से ही सामान्य कार्यों के लिए विशिष्ट रणनीतियों को प्रदान करती है (उदाहरण के लिए: समाचार आलेख निष्कर्षण) और व्यक्तिगत समस्या सेटिंग्स के लिए भी आसानी से बढ़ाया जा सकता है। "
  • Ruby Readability:" रूबी रीडबिलिटी वेबपृष्ठ की प्राथमिक पठनीय सामग्री निकालने का एक साधन है। यह arc90 की पठनीयता परियोजना का रूबी पोर्ट है।"
  • Readability API:" यदि आप सीधे पठनीयता पार्सर तक पहुंच चाहते हैं, तो सामग्री API अनुरोध पर उपलब्ध है। यदि आप रुचि रखते हैं तो हमसे संपर्क करें। "
0

हाल ही में मुझे एक ही समस्या का सामना करना पड़ा। मैंने एक समाचार लेख स्क्रैपर विकसित किया और मुझे लेख पृष्ठों की मुख्य पाठ्य सामग्री का पता लगाना पड़ा। कई समाचार साइटें कई अन्य प्रदर्शित कर रही हैं "मुख्य आलेख" के बगल में पाठ्य सामग्री (जैसे 'अगली पढ़ी', 'आप में रुचि हो सकती है')। मेरा पहला दृष्टिकोण <p> टैग के बीच सभी पाठ एकत्र करना था। लेकिन यह काम नहीं किया क्योंकि वहां समाचार साइटें थीं <p> नेविगेशन जैसे अन्य तत्वों के लिए, आदि भी। कुछ समय पहले मैं Boilerpipe libary पर ठोकर खाई 'अधिक पढ़ सकते हैं'।

पुस्तकालय पहले से ही के लिए विशिष्ट रणनीति प्रदान करता है सामान्य कार्य (उदाहरण के लिए: समाचार लेख निष्कर्षण) और व्यक्तिगत समस्या सेटिंग्स के लिए भी आसानी से बढ़ाया जा सकता है।

यह मेरी समस्या के लिए सही समाधान की तरह लग रहा था, लेकिन ऐसा नहीं था। यह कई समाचार साइटों पर असफल रहा, क्योंकि यह अक्सर समाचार लेख के पूरे पाठ को पार्स करने में सक्षम नहीं था। मुझे नहीं पता क्यों, लेकिन लगता है कि बॉयलरपाइप एल्गोरिदम बुरी तरह लिखित एचटीएमएल से निपट नहीं सकता है। तो कई मामलों में यह सिर्फ एक खाली स्ट्रिंग लौटा, न कि समाचार लेख की मुख्य सामग्री।

इस बुरे अनुभव के बाद मैंने अपना खुद का "लेख टेक्स्ट निकालने वाला" एल्गोरिदम विकसित करने की कोशिश की।

<html> 
<!-- depth: 1 --> 
<nav> 
    <!-- depth: 2 --> 
    <ul> 
     <!-- depth: 3 --> 
     <li><a href="/mhh">Site<!-- depth: 5 --></a></li> 
     <li><a href="/bla">Site<!--- depth: 5 ---></a></li> 
    </ul> 
</nav> 
<div id='text'> 
    <!--- depth: 2 ---> 
    <p>Thats the main content...<!-- depth: 3 --></p> 
    <p>main content, bla, bla bla ... <!-- depth: 3 --></p> 
    <p>bla bla bla interesting bla bla! <!-- depth: 3 --></p> 
    <p>whatever, bla... <!-- depth: 3 --></p> 
</div> 

</html> 

आप देख सकते हैं, इस एल्गोरिथ्म के साथ अधिशेष "अव्यवस्था" बाहर filer के लिए, नेविगेशन तत्वों तरह बातें, वर्गों "आप पसंद कर सकते": मुख्य विचार अलग गहराई में एचटीएमएल विभाजित करने के लिए, उदाहरण के लिए था , आदि मुख्य सामग्री की तुलना में एक अलग गहराई पर होना चाहिए। या दूसरे शब्दों में: अधिशेष "अव्यवस्था" को मुख्य पाठ सामग्री की तुलना में अधिक (या कम) HTML टैग के साथ वर्णित किया जाना चाहिए।

  1. प्रत्येक HTML तत्व की गहराई की गणना करें।
  2. उच्चतम टेक्स्ट सामग्री के साथ गहराई पाएं।
  3. इस गहराई
सबूत के लिए

इस अवधारणा मैं एक Ruby script लिखा था, जो अच्छा काम करता है, समाचार साइटों से अधिकांश के साथ साथ सभी शाब्दिक सामग्री का चयन करें। रूबी लिपि के अलावा मैंने textracto.com api भी विकसित किया जिसका आप मुफ्त में उपयोग कर सकते हैं।

नमस्ते, डेविड

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