2013-06-06 3 views
1
position_list = ['front', 'frnt', 'ft', 'back', 'bck', 'behind', 'right', 'rhs'] 

position = ['down', 'right', 'inner', 'front', 'top', 'back', 'left'] 

다음은 PYTHON에서 작업중인 두 목록입니다. position_list에있는 단어가 있으면 주어진 텍스트에 대해 특정 위치의 단어로 대체해야합니다.텍스트에서 나타나는 목록의 단어를 다른 목록의 단어로 바꾸기

즉 텍스트는 다음과 같습니다

'FRNT'와 'BCK'가 각각 '앞'과 '뒤'로 교체해야합니다는 "FRNT 타이어와 BCK 타이어가 마모된다".

내가 사용하는 파이썬 코드는 다음과 같습니다

if wrong == 'frnt' or wrong == 'ft': 

STR = str.replace (잘못된, '앞'(), '뒤로'잘못된)

if wrong == 'bck' or wrong == 'behind': 

STR = str.replace

하지만이 목록을 사용하는 단어를 직접 대체하는 Python 코드를 찾고 있습니다.

+0

프론트'가 아니라 '맞은'? – mgilson

+0

position_list 단어를 위치 값에 매핑하는 사전을 만들면 [this answer] (http://stackoverflow.com/a/15324369/748858)가 도움이 될 수 있습니다. 어쨌든 – mgilson

+0

. 방금 예를 들었습니다. 나는 그 단어를 내가 필요한 구체적인 단어로 대체하고 싶다. –

답변

1

나는이 두 목록 구조로 어디로 향하고 있는지 알지 못합니다. 그것은 불분명합니다, 그리고 나는 당신이 그것으로부터 적절한 알고리즘을 얻을 수 있다고 생각하지 않습니다.

당신은 말한다 : "주어진 텍스트의 position_list에있는 단어 중 하나가,이 위치에서 특정 단어로 교체해야합니다 발생하는 경우", 즉 '전면이'아래 '로 대체한다는 것을 의미한다 , 'frnt'by 'right'및 'rhs'은 대체품이 없습니다. 그건 말이 안돼!

그래서 나는 당신이 '전면를'다음 단어가 '전면'로 대체 될 것인지, 질문의 나머지 부분에서, 추측하고있어 다음 '다시 '에 대한 단어 'back'으로 바꿀 수 있습니다. 그러나 알고리즘이 어떤 단어가 대체 단어이고 어떤 단어가 대체되어야 하는지를 알 수있는 정보는 없습니다.

그래서 유일한 해결책은보다 쉽고 세련된 알고리즘을 만들기 위해 좀 더 평범한 방식으로 구조를 변경하는 것입니다. 에서

positions = {'front': ['frnt', 'ft'], 'back': ['bck']} 
for new_word, old_words in positions.iteritems(): 
    for old_word in old_words: 
     str = str.replace(old_word, new_word) 

: 또한 사전을 사용할 수 있습니다

replaces = zip(position, position_list) 
for new_word, old_words in replaces: 
    for old_word in old_words: 
     str = str.replace(old_word, new_word) 

: 같은

position = ['front', 'back'] 
position_list = [('frnt', 'ft'), ('bck')] 

다음 알고리즘이 보일 것이다 : 그럼, 당신은이 같은 구조를 시도 할 수 있습니다 다른 말로하면 목록의 인덱스를 처리하는 알고리즘을 만드는 데 필요한 구조를 만드는 것을 피하십시오.

+0

을 사용하는 것이 좋습니다. 문자열에 대해 "다음 십자가 후 2km 씩 주행하십시오"라는 해결책은 효과가 없을 것입니다. – oleg

+0

그게 당신이 발견 한 것인지 확실하지 않지만 방금 해결책을 고쳤습니다. 글을 쓰는 동안 바깥 쪽의 색인을 부주의하게 변조했습니다 .- – zmo

+0

"2 km ** ft ** a ** ft ** 어 다음 교차 " – oleg

0

두 목록간에 일종의 매핑이 필요합니다. 그렇지 않으면 무엇으로 대체해야하는지 알 수 없습니다.당신은 DICT을 사용할 수

t = 'The frnt tyre' 

words = { 
    'front': ('frnt', 'frt'), 
} 

for word, repl in words.items(): 
    for r in repl: 
     t = t.replace(r, word) 

print t 

결과 :

The front tyre 
-1

내가 @oleg이

을 표시된대로 (아마도) 바꾸려하지 않는 문자열을 대체합니다, sting.replace() 메소드 생각

나는 이것이 더 깨끗한 방법은 아니지만 아마도 사전을 사용하고 .split()과 .join()이 도움이된다는 것을 안다.

s = 'the frt bck behind' 
l = s.split() 
new =[] 
d ={'frt':'front','behind':'back','bck':'back'} 
for word in l: 
    if word in d: 
     new.append(d[word]) 
    else:new.append(word)  
print " ".join(new) 
>>> the front back back 

나는 모자와 낮은 및 문장에 문제가 될 것이라고 생각하지만하려면 string.replace의 커플()의 그것을 해결하기 쉽습니다``으로 대체 될 frnt`해야하는 이유

관련 문제