2014-06-25 5 views
5

के लिए काम नहीं कर रहा है मैं शब्द स्टेमिंग के लिए NSLinguisticTagger का उपयोग कर रहा हूं। मैं वाक्य में शब्दों का एक स्टेम शब्द प्राप्त करने में सक्षम हूं, लेकिन एक शब्द के लिए स्टेम शब्द प्राप्त करने में सक्षम नहीं हूं।आईओएस में वर्ड स्टेमिंग - एक शब्द

के बाद कोड मैं उपयोग कर रहा हूँ,

NSString *stmnt = @"i waited"; 
    NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; 

    NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeLemma] options:options]; 
    tagger.string = stmnt; 
    [tagger enumerateTagsInRange:NSMakeRange(0, [stmnt length]) scheme:NSLinguisticTagSchemeLemma options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
     NSString *token = [stmnt substringWithRange:tokenRange]; 
     NSLog(@"%@: %@", token, tag); 
    }]; 

इस मैं के रूप में सही ढंग से हो रही है के लिए है:

i: i 
waited: wait 

लेकिन इसके बाद के संस्करण कोड स्टेम शब्द की पहचान करने में विफल रहता है, तो stmnt = @"waited";

किसी भी मदद की बहुत सराहना की जाती है

उत्तर

4

निम्नलिखित कोड वर्क मेरे लिए घ,

NSString *stmt = @"waited"; 
NSRange stringRange = NSMakeRange(0, stmt.length); 
NSDictionary* languageMap = @{@"Latn" : @[@"en"]}; 
[stmt enumerateLinguisticTagsInRange:stringRange 
             scheme:NSLinguisticTagSchemeLemma 
             options:NSLinguisticTaggerOmitWhitespace 
            orthography:[NSOrthography orthographyWithDominantScript:@"Latn" languageMap:languageMap] 
            usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
             // Log info to console for debugging purposes 
             NSString *currentEntity = [stmt substringWithRange:tokenRange]; 
             NSLog(@"%@ is a %@, tokenRange (%d,%d)",currentEntity,tag,tokenRange.length,tokenRange.location); 
            }]; 
+0

यदि भाषा में वह शब्द नहीं है तो यह खराब पहुंच प्रदान करता है। उदाहरण के लिए बस 'abcd' के साथ प्रयास करें। मैं तेजी से इसका उपयोग कर कोशिश कर रहा हूँ। कोई उपाय? –

+0

मुझे भी खराब पहुंच देता है। यकीन नहीं है कि मैं क्या गलत कर रहा हूँ। – Vojto

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-chechemes कोई भी मौका आप यहां मदद कर सकते हैं? भौतिक उपकरण वही काम नहीं कर रहे हैं: \ –

2

स्वीकार किए जाते हैं जवाब ज़रूरतमंद लोगों के लिए स्विफ्ट के लिए परिवर्तित:

let stmt = "waited" 
    let options: NSLinguisticTaggerOptions = .OmitWhitespace 
    let stringRange = NSMakeRange(0, stmt.length) 
    let languageMap = ["Latn":["en"]] 
    let orthography = NSOrthography(dominantScript: "Latn", languageMap: languageMap) 

    stmt.enumerateLinguisticTagsInRange(
     stringRange, 
     scheme: NSLinguisticTagSchemeLemma, 
     options: options, 
     orthography: orthography) 
     { (tag, tokenRange, sentenceRange, _) ->() in 
      let currentEntity = stmt.substringWithRange(tokenRange) 
      println(">\(currentEntity):\(tag)") 
    } 
+1

मुझे कुछ NSRange रेंज त्रुटियों में परिवर्तनीय नहीं मिला है, इसलिए मैंने स्ट्रिंग को पहले एनएसएसटींग में परिवर्तित कर दिया है ("nsstmt: NSString = stmt nSString के रूप में दें") और nsstmt का उपयोग करके सब कुछ चलाया। सुनिश्चित नहीं है कि कोई बेहतर तरीका है या नहीं। – Soferio

+0

मैं पुष्टि कर सकता हूं कि 'स्ट्रिंग' विधि का उपयोग करते समय एक शब्द के लिए स्टेमिंग विफल हो जाती है, लेकिन 'NSString' समकक्ष का उपयोग करके अपेक्षित कार्य करता है (कम से कम मेरे द्वारा किए गए प्लूरल्स पर)। विचित्र! ब्लॉक आधारित 'एन्युमेरेट टैग्स (इन: स्कीम: विकल्प: का उपयोग:)' के साथ त्रुटियां भी मिल रही हैं, लेकिन 'भाषाईटैग (इन:)' विकल्प अपेक्षा के अनुसार काम कर रहा है। – MathewS

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-chechemes कोई भी मौका आप यहां मदद कर सकते हैं? भौतिक उपकरण वही काम नहीं कर रहे हैं: \ –

0

यह एक शब्द के लिए काम नहीं करता है क्योंकि अपनी भूमिका निर्धारित करने के लिए पर्याप्त जानकारी नहीं है, वाक्य में

हमारे मामले में, जब उपयोगकर्ता हमारे प्राकृतिक भाषा पार्सर में एक शब्द में प्रवेश करता है, तो हम मानते हैं कि यह एक चीज़ का नाम है, और इस प्रकार एक संज्ञा है।

let str = "please show me \(word)" 

तो बस यह NSLinguisticTagger हमेशा की तरह के माध्यम से चलाने:

तो हम बस एक वाक्य जहां यह निहित है कि प्रवेश किया शब्द तो जैसे एक संज्ञा है निर्माण।

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-chechemes कोई भी मौका आप यहां मदद कर सकते हैं? भौतिक उपकरण वही काम नहीं कर रहे हैं: \ –

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