2014-09-05 8 views
9

मैं 200 शब्दों की सूची से कई क्रमपरिवर्तन बनाना चाहता हूं - यह स्पष्ट रूप से एक समस्या पैदा करता है क्योंकि इससे संभवतः संभावित क्रमपरिवर्तन (वाक्यांश में 5 शब्द तक) की कुछ हास्यास्पद संख्या होती है। आदेश में प्रभावी रूप से इस संख्या को सीमित करने में मैं एक दो आयामी हमले होते हैं:शब्द क्रमपरिवर्तन को केवल semantically सही ngrams खोजने के लिए कैसे फ़िल्टर करें? (पायथन 3, एनएलटीके)

  1. एक पीओएस फिल्टर के माध्यम से दर्रा शब्द ताकि केवल भाषायी ध्वनि वाक्यांशों बनाई गई हैं और
  2. फिल्टर उन क्रमपरिवर्तन है कि वास्तविक ngrams हैं द्वारा - अर्थात् एक उच्च पीएमआई/संभावना स्कोर है। मुझे पता है कि NLTK ngrams खोजने की क्षमता प्रदान करता है, लेकिन हर उदाहरण मैंने देखा है कोष है, जो समझ में आता है, क्योंकि एक freqdist की जरूरत है विश्लेषण करती है -

इस अवधारणा के दूसरे भाग मुझे सोच है। हालांकि, क्या एक शब्द क्रमपरिवर्तन के पीएमआई को खोजना संभव है?

क्या मेरे वर्ड क्रमपरिवर्तन के पीएमआई स्कोर को एक कस्टम कॉर्पस के भीतर मिले सामान्य कॉलोकेशन पर आधारित होना संभव होगा?इसे मैन्युअल रूप से किया जा सकता है?

उदाहरण के लिए, क्रमपरिवर्तन (वर्बोज़ चाय) भाषाई रूप से ध्वनि है, यह एक प्रासंगिक रूप से अच्छा क्रमपरिवर्तन नहीं है।

मुझे टेक्स्ट/कॉर्पस के ब्लॉक के भीतर सामान्य कॉलोकेशन खोजने के लिए कोड पता है, लेकिन यह एक बहुत ही अनोखी समस्या है जिसे मैं उम्मीद कर रहा था कि कोई सलाह दे सकता है। कम से कम, मुझे इसके चारों ओर अपने सिर लपेटने में मदद करें!

उदाहरण

**KW** 
Ball 
Bat 
Pinch 
Home 
Run 
Base 
Hitter 
Pitcher 
Call 
etc... 

अधिक पृष्ठभूमि: अब, वहाँ क्रमपरिवर्तन कि इस सूची में से बनाया जा सकता है की एक संख्या है, लेकिन केवल एक मुट्ठी भर है कि वास्तव में मतलब होता है। इस सूची को पीओएस फ़िल्टर के माध्यम से पास करने से मुझे ऐसे कीवर्ड बनाने की अनुमति मिलती है जो भाषाई भावनाएं बनाते हैं - लेकिन जो लोग अर्थात् सही नहीं हैं, वे "कॉल बॉल हिटर" कहें। यह मेरा संघर्ष है, किसी भी तरह पीएमआई जैसे किसी प्रकार के स्कोरिंग मानदंडों के आधार पर अर्थात् सही क्रमिक क्रमिक क्रम बनाने के लिए। अब मेरा विचार एक वेबसाइट को स्क्रैप करना था, यानी http://en.wikipedia.org/wiki/Baseball, इसके भीतर सामान्य ngrams ढूंढें, और फिर किसी भी तरह उस कॉर्पस के आधार पर कीवर्ड क्रमपरिवर्तन की सापेक्ष अर्थात् शक्ति का न्याय करें। लेकिन मैं इसे अवधारणात्मक बनाने के लिए संघर्ष कर रहा हूं और यह सुनिश्चित नहीं है कि यह संभव है। लेकिन वास्तव में, मुझे ngram क्रमपरिवर्तन को कुशलता से खोजने के तरीके के बारे में कोई अन्य विचार सुनना अच्छा लगेगा! यहां अभ्यास सब कुछ मैन्युअल रूप से वर्गीकृत/स्कोर किए बिना गैरकानूनी क्रमपरिवर्तन को कुशलता से समाप्त करने के लिए उबलता है!

+0

क्या आप इस प्रश्न के लिए कुछ उदाहरण बना सकते हैं? –

+0

क्या आप पीएमआई को परिभाषित कर सकते हैं? –

उत्तर

0

आप अपनी पीओएस सूची प्रकट नहीं कर रहे हैं, लेकिन जब तक कि आपकी कीवर्ड सूची उस खंड से कहीं अधिक जटिल न हो जो आप हमें दिखा रहे हैं, यह "सूची में शब्दों के सबसे लंबे अनुक्रमों को ढूंढने" के लिए हल करने योग्य प्रतीत होता है। यह सुनिश्चित करने का एकमात्र तरीका एक वाक्यांश कानूनी है कि यह इनपुट कॉर्पस में होता है, इसलिए PMI गणना एक लाल हेरिंग है। शायद पीओएस फ़िल्टरिंग भी अनावश्यक है।

words='Ball|Bat|Pinch|Home|Run|Base|Hitter|Pitcher|Call' 
curl -s 'http://en.wikipedia.org/wiki/Baseball' | 
grep -Eio "\<($words)(+($words))+\>" 

(मैं grep -w साथ की कोशिश की लेकिन इस पर OSX मेरे लिए grep -o के साथ ठीक से काम नहीं किया है, इसलिए मैं \<...\> शब्द सीमाओं बजाय गयी।)

इस विशिष्ट URL और आंशिक कीवर्ड सूची के लिए उत्पादन के बाद (sort -u | uniq -c | sort -rn के माध्यम से फ़िल्टर्ड) है:।

18 home run 
    2 base ball 
    1 pinch hitter 

(यह काफी सरल है कि मैं एक अजगर स्क्रिप्ट लिखने के लिए परेशान नहीं किया है यह आसानी से कर सकता है अनुरोधों के साथ किया जाना चाहिए।)

अधिक सामान्य मामले में, "गेंद को पिचर फेंकने वाला एक स्पिटबॉल" जैसे वाक्य में पेड़ की सीमाओं को तोड़ने वाले टुकड़े होते हैं जिन्हें आप फ़िल्टर करना चाहते हैं (जैसे "* गेंद को पिचर" यदि आप अपनी शब्द सूची में "the" जोड़ते हैं) और फिर आपको कुछ भाषाविज्ञान (या सांख्यिकी ...) की आवश्यकता है।

5

बस जोर से सोचकर - Google Books NGram Viewer ने अपने कॉर्पस को तोड़ दिया है और सभी [1,2,3,4,5] -ग्राम की सूची सार्वजनिक कर दी है जो 40 गुना से अधिक दिखाई देते हैं, और उनकी आवृत्ति गणना होती है। तो आप Google ngram डेटाबेस में उत्पन्न होने वाले प्रत्येक ngram को ले सकते हैं और इसकी आवृत्ति को देख सकते हैं। उच्च गिनती वाले Ngrams semantically ध्वनि होने की अधिक संभावना है।

... डाउनसाइड यह है कि Google का संपूर्ण एनजीआरएम डेटासेट डाउनलोड करना 1 टीबी जैसा है और मुझे नहीं पता कि उनके पास एपीआई है या नहीं।

संपादित करें:

मैं अगर वहाँ इस के लिए एक API नहीं था हैरान कर दिया जाएगा। इसके अलावा गूगल शहर में केवल खेल होना करने के लिए नहीं लगता है, एक त्वरित खोज कर दिया:

+0

हाय माइक - यह वास्तव में मुझे जो चाहिए वह बहुत करीब है! मुझे माइक्रोसॉफ्ट की सेवा में बदलने के लिए धन्यवाद! त्वरित प्रश्न - यदि मैं 200 शब्दों से क्रमिक क्रम बनाता हूं (जो ट्रिलियन संयोजनों की तरह कुछ होगा) और उसके बाद एक उपज फ़ंक्शन बनाएं जो केवल एक निश्चित स्कोर के ऊपर क्रमिकता को थूकता है, तो क्या एपीआई फ़ंक्शन अनुरोधों की मात्रा को संभालने में सक्षम होगा? – user3682157

+0

यह एक अच्छा सवाल है, मुझे नहीं पता। मुझे पता था कि ये डेटाबेस मौजूद थे, लेकिन उन्होंने कभी उन्हें स्वयं नहीं इस्तेमाल किया है। यदि आपको पता चलता है कि आपको यहां वापस पोस्ट करना चाहिए और मुझे बताएं! –

+0

[एक और सवाल] था (http://stackoverflow.com/questions/11260833/google-n-gram-web-api) एनजीआरएम व्यूअर एपीआई के बारे में पूछना, और जवाब ऐसा लगता है [नहीं, लेकिन वहां एक है क्वेरी करने का तरीका] (http://stackoverflow.com/a/11290260/786020) [Google BigQuery] (https://developers.google.com/bigquery/)। पायथन में, आपको आशा है कि [Google API] (https://developers.google.com/api-client-library/python/) का उपयोग करने में सक्षम होना चाहिए। – Poik

1

मैं मैं क्या साथ अपने ही जवाब पता लगा सोचो एक सुंदर निफ्टी समाधान है! यह इस आलेख पर आधारित है: http://research.microsoft.com/en-us/um/people/jfgao/paper/webngram.sigirws.v2.pdf। यहां विचार यादृच्छिक कचरा क्रमपरिवर्तन का एक समूह नहीं बनाना है और फिर एक माध्यमिक रूप से सही खोजने के लिए उनके माध्यम से निकलना है। विचार केवल पहली जगह में अर्थात् सही क्रमिक क्रम बनाने के लिए है। यह n-1, या के मूल सिद्धांत के अनुसार चरणों में वाक्य बनाकर किया जा सकता है, यह विचार कि एक शब्द केवल पहले से ही शब्द पर अर्थात् निर्भर है।

तो योजना प्रासंगिक कॉर्पस और उनकी आवृत्ति के भीतर बिग्राम के सभी जोड़े को ढूंढना है। आवृत्ति जितनी अधिक होगी, उतनी अधिक संभावना है कि अभिव्यक्ति अर्थात् सही है। तो कहते हैं कि तुम Bigrams साथ इस प्रकार की सूची है कि कोष

The man 
a plan 
in Panama 
Panama City 
Man Who 
Who is 
is awesome 

में 10 बार प्रत्येक दिखाई वहां से आप एन -1 के अनुसार चरणों के भीतर वाक्य का निर्माण किया है। तो आप अपनी मूल सूची से एक प्रारंभिक कीवर्ड लेते हैं। वहां से, अपनी दूसरी सूची में एक बिग्राम ढूंढें जो उसी शब्द के साथ शुरू होता है उसके बाद एक और शब्द और उन्हें एक साथ जोड़ता है। तो उदाहरण के लिए अपनी मूल सूची से 'द' शब्द लें और उपर्युक्त कॉर्पस को देखने के बाद, अब आपके पास इसे 'द मैन' वाक्यांश के रूप में रखना चाहिए। कुल्ला और उस वाक्यांश के साथ दोहराना: एन-1 सिद्धांत का पालन करने वाले एक बड़े फ्रेम की तलाश करें और अब 'मैन' से शुरू होने वाला एक बड़ा फ्रेम ढूंढें। अब आपके पास 'मैन मैन डब्ल्यूएचओ' है। धोये और दोहराएं! यह वाक्यांशों को बनाना चाहिए जो सही क्रम में अर्थात् हैं (जाहिर है आप वाक्य से अंत में डुप्लीकेट हटा देंगे)।

आप क्या सोचते हैं?

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