2014-06-25 9 views
5

Word için NSLinguisticTagger kullanıyorum. Bir cümledeki kelimelerin bir kök kelimesini alabiliyorum, ancak tek bir kelime için bir kök kelime elde edemiyorum. iOS'ta Stemming Word - Tek sözcük için çalışmıyor

ardından

kullanıyorum kodu, ben doğru çıkıyorum Bunun için

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); 
    }]; 

geçerli:

i: i 
waited: wait 

Fakat yukarıdaki kod kök kelimeyi tanımlamak için başarısız stmnt = @"waited";

eğer Herhangi bir yardım için teşekkür ederiz

cevap

4

Aşağıdaki kod çalışması Benim için d,

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

Eğer dil bu sözcüğü içermiyorsa kötü erişim sağlar. Örneğin sadece 'abcd' ile deneyin. Ben çabuk kullanarak deniyorum. Herhangi bir fikir? –

+0

Bana da kötü erişim sağlıyor. Yanlış yaptığımdan emin değilim. – Vojto

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-schemes Burada yardımcı olabilecek bir ihtimal var mı? Fiziksel cihazlar aynı çalışmıyor: \ –

2

kabul cevap ihtiyacı olanlar için Swift dönüştürüldü:

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

Bazı NSRange Range hataları dönüştürülebilir değil, bu yüzden sadece dize NSString önce dönüştürdüm ("NSString: NSString = NSString olarak stmt") ve nsstmt kullanarak her şeyi koştu. Daha iyi bir yol olup olmadığından emin değil. – Soferio

+0

"String" yöntemini kullanırken tek bir sözcük için kaynaklamanın başarısız olduğunu, ancak "NSString" eşdeğerini kullanarak beklediğim gibi çalıştığımı (en az çalıştığım çoğullarda) doğrulayabiliyorum. Tuhaf! Ayrıca blok tabanlı 'enumerateTags (: şema: options: using:)' ile değil, '' linguisticTags (in:) 'alternatifi ile de hatalar elde edilir. – MathewS

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-schemes Burada yardımcı olabilecek bir ihtimal var mı? Fiziksel cihazlar aynı çalışmıyor: \ –

0

rolünü belirlemek için yeterli bilgi yoktur, çünkü tek kelime için çalışmıyor cümlede.

Bizim örneğimizde, kullanıcı, doğal dil çözümleyicimize tek bir sözcük girdiğinde, bunun bir şeyin adı olduğunu ve dolayısıyla bir ad olduğunu varsayarız.

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

Sonra her zamanki gibi NSLinguisticTagger aracılığıyla çalıştırın:

Yani sadece girilen kelime bir isimdir yüzden gibi olduğunu ima ediyor bir cümle kurmak.

+0

https://stackoverflow.com/questions/48768919/device-vs-simulator-linguistic-schemes Burada yardımcı olabilecek bir ihtimal var mı? Fiziksel cihazlar aynı çalışmıyor: –