URL से पाठ निकालने के लिए पठनीयता किस एल्गोरिथ्म का उपयोग करती है?


102

कुछ समय से, मैं विज्ञापनों से संबंधित पाठ और अन्य सभी अव्यवस्थाओं को समाप्त करके एक URL से "प्रासंगिक" टेक्स्ट को बुद्धिमानी से निकालने का एक तरीका खोजने की कोशिश कर रहा हूं। कई महीनों के शोध के बाद, मैंने इसे एक समस्या के रूप में छोड़ दिया। यह सटीक रूप से निर्धारित नहीं किया जा सकता है। (मैंने विभिन्न तरीकों की कोशिश की है, लेकिन कोई भी विश्वसनीय नहीं था)

एक हफ्ते पहले, मैंने पठनीयता को ठोकर मार दी - एक प्लगइन जो किसी भी URL को पठनीय पाठ में परिवर्तित करता है। यह मुझे बहुत सटीक लगता है। मेरा अनुमान है कि वे किसी भी तरह एक एल्गोरिथ्म है कि प्रासंगिक पाठ निकालने के लिए पर्याप्त स्मार्ट है।

क्या किसी को पता है कि वे इसे कैसे करते हैं? या मैं इसे मज़बूती से कैसे कर सकता था?


3
सवाल यह है कि एल्गोरिथ्म क्या एसओ उपयोग करता है कि पठनीयता अपने पृष्ठों को नहीं संभालती है? :)
पायोत्र डोब्रोगोस्ट

जवाबों:


170

पठनीयता में मुख्य रूप से ऐसे आंकड़े शामिल हैं जो कई मामलों में "बस किसी तरह काम करते हैं"।

मैंने इस विषय के बारे में कुछ शोध पत्र लिखे हैं और मैं इस पृष्ठभूमि की व्याख्या करना चाहूंगा कि क्यों एक समाधान के साथ आना आसान है जो अच्छी तरह से काम करता है और जब 100% सटीकता के करीब पहुंचना कठिन हो जाता है।

ऐसा लगता है कि मानव भाषा में अंतर्निहित एक भाषाई कानून है, जो वेब पेज की सामग्री में भी है (लेकिन विशेष रूप से नहीं), जो पहले से ही स्पष्ट रूप से दो प्रकार के पाठ (पूर्ण-पाठ बनाम गैर-पूर्ण-पाठ या, मोटे तौर पर) को अलग करता है, " मुख्य सामग्री "बनाम" बॉयलरप्लेट ")।

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

यदि कोई लेखक चाहता है कि आपको जो लिखा गया है उसे जल्दी से प्राप्त करें, तो वह "नाविक" पाठ का उपयोग करता है, यानी कुछ शब्द (जैसे "STOP", "यह पढ़ें", "यहां क्लिक करें")। यह नेविगेशनल एलिमेंट्स (मेन्यू आदि) में सबसे प्रमुख प्रकार का टेक्स्ट है

यदि कोई लेखक आपको गहराई से समझना चाहता है कि उसका क्या मतलब है, तो वह कई शब्दों का उपयोग करता है। इस तरह, अतिरेक को अतिरेक की लागत पर हटा दिया जाता है। लेख जैसी सामग्री आमतौर पर इस वर्ग में आती है क्योंकि इसमें केवल कुछ शब्दों से अधिक होता है।

जबकि यह पृथक्करण मामलों की अधिकता में काम करने लगता है, यह सुर्खियों, छोटे वाक्यों, अस्वीकरणों, कॉपीराइट पादकों आदि के साथ मुश्किल हो रहा है।

अधिक परिष्कृत रणनीतियाँ, और विशेषताएं हैं, जो बॉयलरप्लेट से मुख्य सामग्री को अलग करने में मदद करती हैं। उदाहरण के लिए लिंक घनत्व (ब्लॉक में शब्दों की संख्या जो ब्लॉक में शब्दों की समग्र संख्या से जुड़े हुए हैं), पिछले / अगले ब्लॉकों की विशेषताएं, "संपूर्ण" वेब में एक विशेष ब्लॉक टेक्स्ट की आवृत्ति, कस्टम एचटीएमएल दस्तावेज़ की डोम संरचना, पृष्ठ की दृश्य छवि आदि।

सैद्धांतिक दृष्टिकोण से कुछ अंतर्दृष्टि प्राप्त करने के लिए आप मेरे नवीनतम लेख " बॉयलरप्लेट डिटेक्शन शोलो टेक्स्ट फीचर्स का उपयोग करके " पढ़ सकते हैं । आप मेरे पेपर प्रस्तुति का वीडियो VideoLectures.net पर भी देख सकते हैं।

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

मेरी राय में, यह सटीक संस्करण संख्या का उल्लेख किए बिना, "पठनीयता इसे पसंद करता है" कहने में कोई मतलब नहीं है।

मैंने एक ओपन सोर्स एचटीएमएल कंटेंट एक्सट्रैक्शन लाइब्रेरी को बायलरपाइप नाम से प्रकाशित किया है , जो कई अलग-अलग निष्कर्षण रणनीतियों को प्रदान करता है। उपयोग के मामले के आधार पर, एक या दूसरे चिमटा बेहतर काम करता है। आप Google AppEngine पर साथी बॉयलरपाइप-वेब ऐप का उपयोग करके अपनी पसंद के पन्नों पर इन एक्सट्रैक्टर्स को आज़मा सकते हैं।

संख्याओं को बोलने देने के लिए, बॉयलरपाइप विकी पर " बेंचमार्क " पृष्ठ देखें, जिसमें कुछ निष्कर्षण रणनीतियों की तुलना की जाती है, जिसमें बॉयलरपाइप, पठनीयता और ऐप्पल सफारी शामिल हैं।

मुझे यह उल्लेख करना चाहिए कि ये एल्गोरिदम मानते हैं कि मुख्य सामग्री वास्तव में पूर्ण पाठ है। ऐसे मामले हैं जहां "मुख्य सामग्री" कुछ और है, जैसे एक छवि, एक तालिका, एक वीडियो आदि। एल्गोरिदम ऐसे मामलों के लिए अच्छी तरह से काम नहीं करेगा।

चीयर्स,

ईसाई


3
क्या यह बॉयलरपाइप परियोजना अभी भी सक्रिय है?
एबी

5
मेरा मानना ​​है कि आपने अपना प्रोजेक्ट GitHub पर रखा है ताकि यह खुले स्रोत डेवलपर्स द्वारा सामाजिक रूप से विकसित हो।
इनक गमस

1
डॉ। कोहल्स्चुटर की व्याख्या का एक अच्छा उदाहरण वास्तव में यह वेबपेज है, सफारी में, यदि आपने रीडर का उपयोग किया है तो आप पाएंगे कि उसका उत्तर मुख्य-पाठ के रूप में प्रदर्शित है, लिंक घनत्व के लिए धन्यवाद। यह जुड़ा हुआ पाठ है, इसलिए अन्य ब्लॉकों की तुलना में मुख्य-पाठ के रूप में पहचाना जाता है।
अब्देल्रहमान ईद

1
"माइग्रेटेड" एक प्रति मेरे रेपो github.com/k-bx/boilerpipe में बस खो जाने की स्थिति में :) :)
कोन्स्टेंटाइन राइबनिकोव

16

पठनीयता एक जावास्क्रिप्ट बुकमार्क है। मतलब इसका क्लाइंट साइड कोड जो DOM को मैनिपुलेट करता है। जावास्क्रिप्ट को देखें और आपको यह देखने में सक्षम होना चाहिए कि क्या चल रहा है।

पठनीयता के वर्कफ़्लो और कोड:

/*
     *  1. Prep the document by removing script tags, css, etc.
     *  2. Build readability's DOM tree.
     *  3. Grab the article content from the current dom tree.
     *  4. Replace the current DOM tree with the new one.
     *  5. Read peacefully.
*/

javascript: (function () {
    readConvertLinksToFootnotes = false;
    readStyle = 'style-newspaper';
    readSize = 'size-medium';
    readMargin = 'margin-wide';
    _readability_script = document.createElement('script');
    _readability_script.type = 'text/javascript';
    _readability_script.src = 'http://lab.arc90.com/experiments/readability/js/readability.js?x=' + (Math.random());
    document.documentElement.appendChild(_readability_script);
    _readability_css = document.createElement('link');
    _readability_css.rel = 'stylesheet';
    _readability_css.href = 'http://lab.arc90.com/experiments/readability/css/readability.css';
    _readability_css.type = 'text/css';
    _readability_css.media = 'all';
    document.documentElement.appendChild(_readability_css);
    _readability_print_css = document.createElement('link');
    _readability_print_css.rel = 'stylesheet';
    _readability_print_css.href = 'http://lab.arc90.com/experiments/readability/css/readability-print.css';
    _readability_print_css.media = 'print';
    _readability_print_css.type = 'text/css';
    document.getElementsByTagName('head')[0].appendChild(_readability_print_css);
})();

और यदि आप जेएस और सीएसएस फ़ाइलों का पालन करते हैं जो उपरोक्त कोड आपको खींचता है तो आपको पूरी तस्वीर मिल जाएगी:

http://lab.arc90.com/experiments/readability/js/readability.js (यह बहुत अच्छी तरह से टिप्पणी की गई है, दिलचस्प पढ़ना)

http://lab.arc90.com/experiments/readability/css/readability.css


12

ऐसा करने का कोई 100% विश्वसनीय तरीका नहीं है, बेशक। आप यहाँ पठनीयता स्रोत कोड देख सकते हैं

मूल रूप से, वे जो कर रहे हैं वह पाठ के सकारात्मक और नकारात्मक ब्लॉकों की पहचान करने की कोशिश कर रहा है । सकारात्मक पहचानकर्ता (यानी डिव आईडी) कुछ इस तरह होंगे:

  • लेख
  • तन
  • सामग्री
  • ब्लॉग
  • कहानी

नकारात्मक पहचानकर्ता होंगे:

  • टिप्पणी
  • चर्चा करें

और फिर उनके पास संभावना नहीं है और शायद उम्मीदवार हैं। वे क्या करेंगे यह निर्धारित करते हैं कि साइट की मुख्य सामग्री होने की संभावना क्या है, 678पठनीयता स्रोत में लाइन देखें । यह ज्यादातर पैराग्राफ की लंबाई, उनके पहचानकर्ताओं (ऊपर देखें), डोम ट्री (यानी यदि पैराग्राफ अंतिम बच्चा नोड है) का विश्लेषण करके किया जाता है, सब कुछ अनावश्यक हटा दें, फ़ॉर्मेटिंग हटा दें, आदि।

कोड में 1792 लाइनें हैं। यह एक गैर तुच्छ समस्या की तरह प्रतीत होता है, इसलिए हो सकता है कि आप वहां से अपनी प्रेरणा प्राप्त कर सकें।


2
क्या आपको पता है कि क्या उनका कोड ओपन सोर्स है और क्या इसका इस्तेमाल कमर्शियल प्रोडक्ट्स में किया जा सकता है?
user300981

2
यह कहता है कि अपाचे लाइसेंस 2.0 के तहत स्रोत कोड जारी किया गया है, इसका मतलब है कि आप इसका उपयोग कर सकते हैं, इसे वितरित कर सकते हैं, इसे संशोधित कर सकते हैं और इसके संशोधित संस्करण वितरित कर सकते हैं। मैं हालांकि विवरण पर बहुत स्पष्ट नहीं हूं।
slhck

2
@bobsmith Apple ने इसका उपयोग सफारी के नवीनतम संस्करण में किया। उन्होंने जारी नोटों में आर्क 90 को श्रेय दिया।
s4y

7

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

प्रमुख मुद्दे लिंक, एम्बेडेड विसंगतियां, स्क्रिप्टिंग शैली और अपडेट हैं।


3
यह वास्तव में एक दिलचस्प दृष्टिकोण की तरह लगता है - क्या आपके पास इससे साझा करने के लिए कोई कोड है?
lsh

2
मैं दूसरा, क्या आपके पास अपने कोड के आसपास कोई उदाहरण कोड या जानकारी है जिसे हम देख सकते हैं?
userabuser
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.