2016-06-09 7 views
1

finden Sie die ursprüngliche Frage hier auf hackerrankNLP-POS Herausforderung

Obwohl meine Lösung unvollständig jemand helfen kann, ist mir bitte zu verstehen, wohin ich gehe falsch? (In der zweiten Funktion gibt die Tagger einen 2-Buchstaben-Tag, obwohl die Frage nach einem fragt 3-Buchstaben-Tag. Vielen Dank!

import re 
import nltk 
import string 
final_tagged = "" 
raw_input(strs) 
def tokenize_two(i): 
    temp = i 
    global strs 
    "remove /?? and pos tag" 
    for ch in ['/??']: 
     if ch in i: 
      i=i.replace(ch,"") 
      #pos tagging 
    tag = nltk.pos_tag([i]) 
    for item in tag: 
     for ch in ['??']: 
      if ch in temp: 
       temp = temp.replace(ch,item[1]) 
    replace = i+"/??" 
    strs = string.replace(strs,replace,temp) 
    return temp; 

def tokenize_three(i): 
    "remove /??? and pos tag" 
    temp = i 
    global strs 
    for ch in ['/???']: 
     if ch in i: 
      i=i.replace(ch,"") 
    tag = nltk.pos_tag([i]) 
    for item in tag: 
     for ch in ['???']: 
      if ch in temp: 
       temp = temp.replace(ch,item[1]) 
    replace = i+"/???" 
    strs = string.replace(strs,replace,temp) 
    return temp; 

a = [w for w in re.split('\s+',strs)] 
for i in a : 
    if(i.endswith("/??")): 
     tagged = tokenize_two(i) 
    if(i.endswith("/???")): 
     final_tagged = tokenize_three(i) 
print strs 

Antwort

1
tag = nltk.pos_tag([i]) 

POS-Tagging ist kontextabhängig. Sie müssen die gesamten Token versehen passieren Satz als ein Argument zu pos_tag, anstatt pos_tag einmal für jedes unbekannte Wort anzurufen

+0

Ich weiß nicht, wie ich das vermisste. – CyberDuck