2014-04-26 15 views
5

मैं पाइथन में एनएलटीके से टोकनेज़र का उपयोग कर रहा हूं।विराम चिह्न को कैसे हटाया जाए?

पहले से ही मंच पर विराम चिह्नों को हटाने के लिए उत्तर के पूरे समूह हैं। हालांकि, उनमें से कोई भी निम्न समस्याओं में से सभी को एक साथ संबोधित करें:

  1. अधिक एक एक पंक्ति में प्रतीक से। उदाहरण के लिए, वाक्य: उन्होंने कहा, "यह है।" चूंकि उद्धरण चिह्न के बाद एक अल्पविराम है, तो टोकननाइज़र नहीं हटाएगा। "वाक्य में। टोकनिज़र ['वह', 'कहा', ',' '', '' '' ',' '' है। '] के बजाय [' वह ',' कहा ',' वह ',' एस ',' यह ']। कुछ अन्य उदाहरणों में '...', '-', '!?', ',' ', और इतने पर शामिल हैं।
  2. वाक्य वाक्य के अंत में प्रतीक निकालें। यानी वाक्य: हैलो वर्ल्ड। टोकननाइज़र ['हैलो', 'वर्ल्ड'] के बजाय ['हैलो', 'वर्ल्ड'] दे देगा। 'वर्ल्ड' शब्द के अंत में अवधि की सूचना दें। कुछ अन्य उदाहरणों में '-', ', '
  3. शुरुआत, मध्य, या किसी भी चरित्र के अंत में। सामने और के बाद प्रतीकों के साथ वर्ण निकाल दें। यानी '*u*', '''','""'

दोनों समस्याओं को हल करने की एक सुंदर तरीका है?

+0

क्या कठिनाइयों आप इन आवश्यकताओं को लागू करने में क्या है? कोड के आपके वर्तमान संस्करण के साथ आपके पास क्या समस्याएं हैं? – jfs

+0

बीटीडब्ल्यू, ऐसे कई प्रश्न हैं जिनके पास उत्तर हैं जो सभी आवश्यकताओं को पूरा करते हैं उदाहरण के लिए, [यूनिकोड स्वरूपित तारों से पेंचरेशन निकालें] (http://stackoverflow.com/q/11066400/4279) – jfs

+0

[जवाब देने के सर्वोत्तम तरीके] पायथन में एक स्ट्रिंग से विराम चिह्न] (http://stackoverflow.com/q/265960/4279) आपको असफल कर देता है? – jfs

उत्तर

6

यदि आप अपनी स्ट्रिंग को एक शॉट में सभी को टोकननाइज़ करना चाहते हैं, तो मुझे लगता है कि आपकी एकमात्र पसंद nltk.tokenize.RegexpTokenizer का उपयोग करना होगा। निम्नलिखित दृष्टिकोण आपको विराम चिह्न को पूरी तरह से हटाने से पहले वर्णमाला के वर्णों को हटाने के लिए मार्कर के रूप में विराम चिह्न का उपयोग करने की अनुमति देगा (जैसा कि आपकी तीसरी आवश्यकता में उल्लिखित है)। दूसरे शब्दों में, यह दृष्टिकोण सभी विराम चिह्नों को अलग करने से पहले *u* को हटा देगा।

एक तरह से इस बारे में जाना है, तो, तो जैसे अंतराल पर tokenize के लिए है:

>>> from nltk.tokenize import RegexpTokenizer 
>>> s = '''He said,"that's it." *u* Hello, World.''' 
>>> toker = RegexpTokenizer(r'((?<=[^\w\s])\w(?=[^\w\s])|(\W))+', gaps=True) 
>>> toker.tokenize(s) 
['He', 'said', 'that', 's', 'it', 'Hello', 'World'] # omits *u* per your third requirement 

इस मापदंड आप ऊपर निर्दिष्ट के सभी तीन को पूरा करना चाहिए। नोट, हालांकि, यह टोकननाइज़र "A" जैसे टोकन वापस नहीं करेगा। इसके अलावा, मैं केवल एक अक्षर पर टोकननाइज करता हूं जो और विराम चिह्न के साथ समाप्त होता है। अन्यथा, "जाओ।" एक टोकन वापस नहीं करेगा। आपका डेटा कैसा दिखता है और आपकी अपेक्षाओं के आधार पर आपको अन्य तरीकों से रेगेक्स को समझने की आवश्यकता हो सकती है।

+0

समाधान के लिए धन्यवाद। मुझे लगता है कि यह वही है जो मैं ढूंढ रहा हूं। – user3534472

+0

क्षमा करें, मैंने चेक मार्क पर क्लिक किया, लेकिन किसी भी तरह से यह नहीं हुआ। – user3534472

+0

@ user3534472 धन्यवाद! कोई चिंता नहीं। –

10

समाधान 1: Tokenize और पट्टी विराम चिह्न टोकन

>>> from nltk import word_tokenize 
>>> import string 
>>> punctuations = list(string.punctuation) 
>>> punctuations 
['!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'] 
>>> punctuations.append("''") 
>>> sent = '''He said,"that's it."''' 
>>> word_tokenize(sent) 
['He', 'said', ',', "''", 'that', "'s", 'it', '.', "''"] 
>>> [i for i in word_tokenize(sent) if i not in punctuations] 
['He', 'said', 'that', "'s", 'it'] 
>>> [i.strip("".join(punctuations)) for i in word_tokenize(sent) if i not in punctuations] 
['He', 'said', 'that', 's', 'it'] 

समाधान 2 बंद: विराम चिह्न तो हटाने tokenize

>>> import string 
>>> string.punctuation 
'!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~' 
>>> sent = '''He said,"that's it."''' 
>>> " ".join("".join([" " if ch in string.punctuation else ch for ch in sent]).split()) 
'He said that s it' 
>>> " ".join("".join([" " if ch in string.punctuation else ch for ch in sent]).split()).split() 
['He', 'said', 'that', 's', 'it'] 
+0

मुझे यह दृष्टिकोण पसंद है, लेकिन मुझे लगता है कि ओपी तीसरी आवश्यकता पर लटका हुआ है। ओपी का कहना है कि कोड को वर्णों के पहले या बाद में "प्रतीकों" के साथ वर्णों को हटा देना चाहिए और उदाहरण '' * u * '' के रूप में दिया गया है। इस प्रकार इस तरह के संदर्भ में एक 'यू' हटा दिया जाना चाहिए (संभवतया तारांकन अभी भी संकेत देते हैं कि चरित्र 'यू' को जाने की जरूरत है)। –

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