मेरे पास एक बैश फ़ंक्शन है जो मुझे Google से एक शब्द परिभाषा देखने देता है:

defword() {
    if [ -z $2 ]; then
        header=30
    else
        header=$2
    fi
    lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | grep -v "\[1\] Google" | grep -v "define: ${1}__" | grep -v "\[2\]IMAGES" | head -${header}
}

जैसे defword dog 'कुत्ते' के लिए आउटपुट की पहली 30 पंक्तियों को प्रदर्शित करेगा और defword dog 50 पहली 50 पंक्तियों को प्रदर्शित करेगा।

यह मेरे लिए होता है कि यह क्लीनर आउटपुट हो सकता है अगर मैं सिर्फ 'संज्ञा', 'क्रिया', 'विकिपीडिया' अनुभाग आदि को पकड़ सकता हूं।

क्या आप ऐसे तरीके सुझा सकते हैं (शायद grep या sed या awk के साथ?) जो मैं कह सकता हूं defword dog noun जो पूरे संज्ञा खंड को प्रदर्शित करेगा (शब्द 'संज्ञा' से अगले खंड से पहले रिक्त रेखा तक) , defword dog noun 2 संज्ञा खंड से केवल परिभाषा 2 प्रदर्शित करने के लिए (और 'क्रिया' या 'विशेषण' के लिए समान यदि वे खंड मौजूद हैं), और defword dog wikipedia जो विकिपीडिया परिभाषा को प्रदर्शित करता है जो संज्ञा के नीचे मौजूद है और क्रिया (उपरोक्त फ़ंक्शन के साथ defword dog 100 करके उस विकिपीडिया अनुभाग को देख सकते हैं)?

0
YorSubs 1 अक्टूबर 2021, 13:21
1
हालांकि यह सीधे आपके प्रश्न का उत्तर नहीं देता है, तो बेहतर होगा कि आप dictionaryapi.dev रनिंग कर्ल जैसे एपीआई का उपयोग करें। https://api.dictionaryapi.dev/api/v2/entries/en/dog आपको एक json फ़ॉर्मेट वाला परिणाम मिलेगा जिसे jq जैसी किसी चीज़ पर पाइप करके पार्स करना आसान होगा।
 – 
SamBob
1 अक्टूबर 2021, 13:49
1
सभी प्रकार की चीजों के लिए अन्य एपीआई होंगे - एक एपीआई वह है जो सामान्य रूप से वेब पेजों से बात करने के लिए कार्यक्रमों के लिए उपयोग किया जाता है - कई वेबपेजों में अपनी सभी सेवाओं के लिए Google सहित, स्वयं के एपीआई होते हैं (developers.google.com/apis-explorer) । ध्यान दें कि उनके साथ जाने में अक्सर मुश्किल हो सकती है क्योंकि उन्हें एक कुंजी सेट अप की आवश्यकता होगी और सीमित अनुरोध होंगे। ऊपर दिया गया शब्दकोश काफी सीधा है।
 – 
SamBob
1 अक्टूबर 2021, 14:02
1
मैंने हमेशा jq का उपयोग किया है अगर मुझे इसे कमांड लाइन, या पायथन और इसके जेसन पैकेज पर अधिक शामिल काम के लिए करने की ज़रूरत है। शब्दकोश के लिए जिस तरह से jq कमांड jq '.[] | .meanings[] | select(.partOfSpeech=="noun") | .definitions | .[].definition' होगा
 – 
SamBob
1 अक्टूबर 2021, 14:03
1
यह भी पता चलता है कि मैंने आपको जो लिंक दिया है, वह Dictionaryapi.dev सिर्फ Google खोजता है और वह टेक्स्ट प्रोसेसिंग करता है जिसे आप ढूंढ रहे हैं! इसका डेवलपर इसे यहां प्रस्तुत करता है: stackoverflow.com/a/48983463/1581658 यह बैश के बजाय जावास्क्रिप्ट में लिखा गया है
 – 
SamBob
1 अक्टूबर 2021, 14:06
1
ओह, निश्चित रूप से, मुझे पता है कि एक एपीआई सामान्य रूप से क्या है (मैं उन्हें हर समय विभिन्न प्रोग्रामिंग में उपयोग करता हूं), लेकिन मैंने पहले इस तरह के वेब पेज नहीं देखे हैं। मैंने एक शब्दकोश के साथ खेला, लेकिन अजीब तरह से (चूंकि आपने कहा था कि यह सिर्फ Google खोजता है) ऐसा लगता है कि Google के परिणामों की तुलना में परिभाषाओं की कमी है। jq स्निपेट के लिए बहुत-बहुत धन्यवाद, यह बहुत अच्छा है, मैं कुछ नमूने बनाऊंगा और अपनी प्रोफ़ाइल में रखूंगा, मैं निश्चित रूप से भविष्य में इनका अच्छा उपयोग करूंगा। मैं
 – 
YorSubs
1 अक्टूबर 2021, 16:26

1 उत्तर

सबसे बढ़िया उत्तर

Sed (https://unix.stackexchange.com/a/264977 के साथ दो पंक्तियों के बीच मिलान संभव है।

अपनी लाइनों के बीच मिलान करने के लिए आप पाइप कर सकते हैं

  sed -n '/^   noun$/,${p;/^$/q}'

यह आपकी पूरी स्क्रिप्ट को बस होने के लिए व्यवस्थित करने की अनुमति देता है

lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | sed -n '/^   '"${2:-noun}"'$/,${p;/^$/q}'

बैश में डिफ़ॉल्ट पैरामीटर सिंटैक्स का उपयोग करके (https://coderwall. com/p/s8n9qa/डिफ़ॉल्ट-पैरामीटर-मान-इन-बैश)

2
SamBob 1 अक्टूबर 2021, 15:55
1
मुझे लगता है कि आपको सिंगलकोट्स में sed पैटर्न लिखना चाहिए, और फिर केवल विस्तार के लिए दोहरे उद्धरण चिह्नों में बदलना चाहिए, फिर आप भविष्य की समस्याओं से भी बच सकते हैं जैसे कि आपके पास मूल रूप से ${p;/^$/q} शेल द्वारा व्याख्या की जा रही थी।
 – 
Andreas Louv
1 अक्टूबर 2021, 14:37
1
अच्छा बिंदु: ऐसा करने के लिए संपादित किया गया
 – 
SamBob
1 अक्टूबर 2021, 15:55