2014-04-16 3 views
-4

가사 프로그램에 '구텐베르크 빈도 목록'을 입력하면 NLTK를 사용하는 영어 이외의 모든 문자를 제거 할 수 있습니까?NLTK를 사용하여 모든 영어가 아닌 문자와 단어를 제거하는 방법>

Plzz 도움말 - 카림

+0

https://stackoverflow.com/questions/how-to-ask – larsks

+0

질문을 편집하십시오. 막연합니다. –

+0

@pss 어떻게 막연합니까? 입력 : 구텐베르크 주파수 목록 출력 : 나는 결론이 페이지 https://stackoverflow.com/questions/how-to-ask 에 전체 물건을 읽을 때 질문 불행히도 것을 영어 사전 – user3541877

답변

2

내가 전에 nltk와 함께 일한 적이. 너무 좋은 해결책이있을 수 있습니다. 내 코드에서 은 단순히 다음을 수행 오전 :

  1. lines로라는 이름의 변수에 frequencyList.txt라는 이름으로/영어가 아닌 영어 단어를 검사 할 필요가있는 파일을 읽기.

  2. 그러면 eng_words_only.txt이라는 새 파일을 열려고합니다. 이 파일에는 영어 단어 만 들어 있습니다. 처음에이 파일은 또한 wordnet에있는 경우이 파일이 내가 확인 frequencyList.txt의 모든 단어를 이제 frequencyList.txt

  3. 에 존재하는 모든 영어 단어를 포함 나중에 스크립트를 실행 한 후, 비어 있습니다. 단어가있는 경우 eng_words_only.txt 파일에이 단어를 씁니다. 그렇지 않으면 아무 것도하지 않습니다. 데모 용으로 wordnet을 사용하고 있습니다. 모든 영어 단어가 포함되어 있지 않습니다!

코드 :

from nltk.corpus import wordnet 

fList = open("frequencyList.txt","r")#Read the file 
lines = fList.readlines() 

eWords = open("eng_words_only.txt", "a")#Open file for writing 

for w in lines: 
    if not wordnet.synsets(w):#Comparing if word is non-English 
     print 'not '+w 
    else:#If word is an English word 
     print 'yes '+w 
     eWords.write(w)#Write to file 

eWords.close()#Close the file 

테스트 : 내가 먼저 다음과 같은 내용으로 frequencyList.txt로라는 이름의 파일을 생성 : 코드를 실행에 다음

cat 
meoooow 
mouse 

은 '당신에게 니펫을 콘솔에 다음 출력이 표시됩니다.

not cat 

not meoooow 

yes mouse 

그러면 영어로 된 단어 만 들어있는 파일이 eng_words_only.txt으로 생성됩니다. eng_words_only.txt에는 mouse 단어 만 포함됩니다. 고양이가 영어 단어 인 것을 알 수 있지만 아직 eng_words_only.txt 파일에 없습니다. 이것이 워드 넷 대신에 좋은 소스를 사용해야하는 이유입니다. 참고 : python 스크립트 파일과 frequencyList.txt은 같은 디렉토리에 있어야합니다. 또한 frequencyList.txt 대신 확인/조사하려는 파일을 사용할 수 있습니다. 이 경우 코드 스 니펫에서 파일 이름을 변경하는 것을 잊지 마십시오.

두 번째 해답 : 묻지 않았지만 여전히이 영어 단어 테스트를 수행하는 다른 방법이 있습니다.

코드는 다음과 같습니다. 여기서 wordlist-eng.txt은 영어 단어가 들어있는 파일입니다.

wordlist-eng.txt, frequencyList.txt 및 python 스크립트를 같은 디렉토리에 보관해야합니다.eng_words_only.txtfrequencyList.txt 파일에 존재하는 모든 영어 단어를 포함 할 스크립트를 실행 한 후

with open("wordlist-eng.txt") as word_file: 
    english_words = set(word.strip().lower() for word in word_file) 

fList = open("frequencyList.txt","r") 
lines = fList.readlines() 
fList.close() 

eWords = open("eng_words_only.txt", "a") 

for w in lines: 
    if w.strip().lower() in english_words: 
     eWords.write(w) 
    else: pass 
eWords.close() 

.

도움이 되었기를 바랍니다.

+1

도와 주셔서 대단히 감사합니다. – user3541877

+0

SO에 오신 것을 환영합니다. –

+0

@ pss-- 길이 16 자 이상의 모든 고유 단어를 어떻게 제거 할 수 있습니까? 이 단어들의 크기를 15 문자로 줄이면서 구분하십시오. (접미사, 접미어 및 중온어 제거에 대한 힌트) fo = open(“sixteenLetter_words_only.txt”,”wb”) words = set(w.lower() for w in open('distinct_words_only.txt').read().split()) for item in english_words \t if len(item) > 15 \t \t fo.write(item) fo.close() user3541877

관련 문제