2014-09-02 2 views
0

저는 Python을 배우고 있으며 현재 사용자 입력에 의해 주어진 문자열에 대해 가장 일반적인 1,000 단어 (주어진대로 here)를 검색하는 스크립트를 작성하려고합니다.문자열에 대한 검색 파일

지금까지 raw_input을 통해 하나의 단어가 주어지면 그 목록 (.txt로 저장 됨)을 검색하고 사용자 입력이 파일에 있는지 확인할 수있었습니다. 그러나 텍스트를 검색하는 방법을 알아낼 수없고 단순히 "Word is 1000 words"또는 "Word is not in the list"로 답장하는 것처럼 보입니다. 각 줄마다 "단어가 목록에 없습니다"라고 대답 할 수 있습니다.

기본적으로 사용자의 입력을 비교하고 해당 입력의 모든 단어가 1,000 개의 가장 일반적인 단어 (분명히 this XKCD 만화로 표시됨)에 있는지 확인하는 스크립트를 작성하려고합니다. 궁극적으로, 나는 this website이하는 일을 파이썬 스크립트로 '재창조'하고 싶습니다.

는 여기에 지금까지이 작업은 다음과 같습니다

cmnwords = open('C:\\Users\\[username]\\1000words.txt') 
uInput = raw_input("What is your sentence? ") 


def checkInput(): 
    for line in cmnwords: 
     if uInput not in line: 
      print uInput, "is not in the most common words" 
     else: 
      print uInput, "is OKAY! :D", line 
checkInput() 

작품의 위의 종류 -하지만 각 줄 응답합니다. 나는 기본적으로 "예, 사용자의 입력 문자열이 가장 일반적인 단어 목록에 있습니다"또는 "모든 단어에 대한 대답을 볼 필요없이"가장 일반적인 단어는 아니지만 다시 시도하십시오 "라는 것을 알고 싶습니다.

(또한 사용자 입력을 정확히 검색하려면 어떻게해야합니까? 위 실행하면 "사용자"라고 입력하면 "젊은", "자신"이라고 생각하고 다른 사람은 괜찮습니다. 단지 "당신"을 정확히 찾고 싶습니다.)

이 말이 맞는가요? 어떤 도움을 주셔서 감사 드리며 무엇이든지 명확히 할 수 있는지 알려 주시기 바랍니다.

+0

질문의 두 번째 부분에서 그 이유는 문자 ''you ''가 문자열 ''young''에 있고 파이썬에게 묻고 있기 때문입니다. 문자 그대로 'you'in young "진실한 진술 인 것은 분명합니다. –

답변

0

cmnwords을 1000 개의 가장 일반적인 단어가 들어있는 문자열 목록이라고합시다.

그런 다음 word in cmnwords을 사용하여 주어진 문자열이 가장 일반적인 단어에 속하는지 테스트 할 수 있습니다.

cmnwords = open('C:\\Users\\[username]\\1000words.txt').read().splitlines() 
# cmnwords = ['a', 'able', ...] 
uInput = raw_input("What is your word? ") 

def checkInput(): 
    # optionally you can use uInput.lower() below so that the search is case-insensitive 
    if uInput in cmnwords: 
     print uInput, "is not in the most common words" 
    else: 
     print uInput, "is OKAY! :D", line 

checkInput() 

이렇게하면 질문에서 언급 한 '너', '너 자신'과 부분적으로 일치하는 문제를 해결할 수 있습니다.

0

첫 번째 문제는 전체 입력 문자열을 검색한다는 것입니다. 사용자가 "You will not go to space today"을 입력하면 정확한 문자열 "You will not go to space today"이 cmnwords에있는 경우에만 프로그램이 완료됩니다. 당신은 무엇을하고 싶은지 입력을 단어들로 나눕니다 : re.findall (r "[a-z ']", uInput)에서 일치하는 단어는 [match.lower()입니다]

두 번째 문제는 1000words.txt의 각 줄을 확인한 후에 is OKAY! :D을 인쇄한다는 것입니다. 전체 파일을 확인할 때까지 기다리십시오. 다음 인쇄 OKAY.

관련 문제