2014-12-17 2 views
0

에 변화를 다음과 같이 내가보고 음성 술래의 일부에서 발생하는 두 개의 목록이 pos_names에. 그래서 기본적으로 pos_tags에서 John과 Murphy를 찾고 POS 태그를 NNP로 바꿔야합니다.목록의 하위 항목을 비교하고 파이썬

+0

'('행성 ','uJJ '), ('지구 ','uJJ ')]'가 속한 것은 무엇입니까? – Joschua

+1

지금까지 시도한 적이 있습니까? –

+0

원본 게시물에서 수정 된 사본 및 붙여 넣기 오류입니다. – Markus

답변

0

나는 사전은이 문제에 대한 더 자연스러운 해결책이 될 것이라고 동의하지만, 당신이 순서대로 pos_tags 필요하면 더 명시 적 해결책은 다음과 같습니다

for word, pos in pos_names: 
    for i, (tagged_word, tagged_pos) in enumerate(pos_tags): 
     if word == tagged_word: 
      pos_tags[i] = (word,pos) 

(A 사전 probaby 빠르게위한 것 단어 수가 많으므로 단어 순서를 목록에 저장하고 사전을 사용하여 POS 할당을 수행하는 것이 좋습니다.

+0

이 완벽합니다. 나는 성능에 대해 너무 걱정하지 않는다. 그래서 이것은 나를 위해 잘 작동한다. – Markus

0

pos_names의 사전을 찾아보기 테이블로 사용할 수 있습니다. 그런 다음 get을 사용하여 교체 가능한 테이블을 검색하고 대체가 없으면 태그를 그대로 남겨 둘 수 있습니다.

d = dict(pos_names) 
pos_tags = [(word, d.get(word, tag)) for word, tag in pos_tags] 
0

을 감안할 때

pos_tags = [('This', u'DT'), ('is', u'VBZ'), ('a', u'DT'), ('test', u'NN'), ('sentence', u'NN'), ('.', u'.'), ('My', u"''"), ('name', u'NN'), ('is', u'VBZ'), ('John', u'NNP'), ('Murphy', u'NNP'), ('and', u'CC'), ('I', u'PRP'), ('live', u'VBP'), ('happily', u'RB'), ('on', u'IN'), ('Planet', u'JJ'), ('Earth', u'JJ'), ('!', u'.')] 

names = ['John', 'Murphy'] 

당신은 할 수 있습니다 :

[next((subl for subl in pos_tags if name in subl)) for name in names] 

을 줄 것이다 :

,
[('John', u'NNP'), ('Murphy', u'NNP')] 
+0

건배. 하지만 내 목록은 다음과 같습니다. names = [('John', 'NNP'), ('Murphy', 'NNP')] – Markus

관련 문제