हाल ही में मुझे एक ही समस्या का सामना करना पड़ा। मैंने एक समाचार लेख स्क्रैपर विकसित किया और मुझे लेख पृष्ठों की मुख्य पाठ्य सामग्री का पता लगाना पड़ा। कई समाचार साइटें कई अन्य प्रदर्शित कर रही हैं "मुख्य आलेख" के बगल में पाठ्य सामग्री (जैसे 'अगली पढ़ी', 'आप में रुचि हो सकती है')। मेरा पहला दृष्टिकोण <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 टैग के साथ वर्णित किया जाना चाहिए।
- प्रत्येक HTML तत्व की गहराई की गणना करें।
- उच्चतम टेक्स्ट सामग्री के साथ गहराई पाएं।
- इस गहराई
सबूत के लिए
इस अवधारणा मैं एक Ruby script लिखा था, जो अच्छा काम करता है, समाचार साइटों से अधिकांश के साथ साथ सभी शाब्दिक सामग्री का चयन करें। रूबी लिपि के अलावा मैंने textracto.com api भी विकसित किया जिसका आप मुफ्त में उपयोग कर सकते हैं।
नमस्ते, डेविड
स्रोत
2016-07-31 17:42:00
दिलचस्प विचार एक JRuby संस्करण एक शुद्ध माणिक कार्यान्वयन Ruby Boilerpipe भी में मूल boilerpipe जावा कोड पोर्ट किया है। निश्चित रूप से ऐसा कुछ नहीं जो मैंने तुरंत सोचा होगा ...:] –
मैंने इस बारे में सोचा, मैंने माता-पिता द्वारा अनुच्छेदों को समूहबद्ध करने की कोशिश की। लेकिन व्यवहार में, अन्य पैराग्राफ हो सकते हैं जो मुख्य कंटेनर से विचलित हो सकते हैं। – Andrew
उस स्थिति में, आपको शायद कंटेनर के नाम/आईडी पर किसी प्रकार की ह्युरिस्टिक का उपयोग करना होगा। क्या आपके पास उल्लेख किए गए उदाहरण का यूआरएल है? –