2015-01-22 4 views
1

저는 Python을 처음 접했고 최근에는 두 텍스트 간의 코사인 유사성을 수행하기 위해 일부 텍스트 처리를 수행해야합니다.Python을 사용하여 고유 한 단어를 0 또는 1로 벡터화

NLTK 라이브러리를 사용하여 소문자, 텍스트 토큰 화, 불용어 제거 및 해당 단어의 형태소 분석과 같은 텍스트의 기본 사전 처리 작업을 수행 할 수 있습니다. 이제는 모든 텍스트 파일에서 고유 한 단어 목록을 만들 수있었습니다.

그런 다음 내가 만든이 고유 단어 목록에는 내가 가지고있는 텍스트 파일에 따라 1로 벡터화하고 (나머지는 0으로) 원하는 특정 단어 만 있습니다.

awesome| best | carry | elephant | fly | home | irresponsible | implicit 
1  | 1 | 0  | 0  | 0 | 1 | 0    | 0 

내가 인터넷 검색 여기 스택 오버 플로우를 통해 보는 시도했다, 그러나 일반적인 솔루션 중 하나를 보인다

그래서 예를 들어, 고유 한 단어의 목록을 벡터화 된 후에는 아래와 같이 보일 것이다 목록 변환에 scikit learn - features 추출을 사용하고 있습니다. 그러나, 나는 단지 0 또는 1을 원한다. 그리고 1은 텍스트 파일에 의해 지정되어야한다. 예를 들어

, 나는이 사전에 유사성을 계산하는 싶습니다 (1으로 모든 벡터화 후) 한 TEXTFILE이 ... 그래서 다음과 같이 보일 것이다 :

Text_to_Compare.txt

awesome | fly | implicit 
1  | 1 | 1 

그런 다음 "Text_to_Compare.txt"를 고유 단어 목록과 비교하여 유사성 결과를 계산합니다.

누구나 친절하게 안내 할 수 있습니다. 고유 한 단어 목록을 0 ​​또는 1로 벡터화하고 "Text_to_Compare.txt"를 모두 1로 벡터화하려면 어떻게해야합니까?

감사합니다.

+0

출력 결과를 예상 할 수 있습니까? 즉"텍스트 파일을 '{'awesome ': 1,'best ': 1,'carry ': 0, ...}'와 같은 파이썬 dict로 구문 분석하고 싶습니다. 지금 당장 당신이 성취하고자하는 바를 말하는 것은 어렵습니다. –

+0

@HenryKeiter, 신속한 회신에 감사드립니다! 가장 먼저 할 일은 단어 목록을 0 ​​또는 1로 벡터화하고 두 파일 간의 유사성을 계산하는 것입니다. 따라서 최종 출력은 0.74와 유사해야합니다 (유사성에 따라 다름). 그러나 현재, 나는 여전히 독특한 단어들의리스트를 벡터화하는 데에 집착하고있다 ... – Yoshiaki

+0

당신은 오해한다. 당신의 * vectorizing * 결과는 어떻게 될 것으로 기대합니까? 일부 텍스트의 경우 데이터 구조 나 출력 형식 지정 조언을 찾는 것처럼 들릴 수 있지만 "단어 목록을 0 ​​또는 1로 벡터화"하는 것은 확실한 문제는 아닙니다. –

답변

0

원하는대로 할 수 있습니까? 당신이 당신의 파일 (파이썬에서 .split() 방법) 토큰 화 한 경우

text_file = ['hello','world','testing'] 
term_dict = {'some':0, 'word':0, 'world':0} 

for word in text_file: 
    if word in term_dict: 
     term_dict[word] = 1 

는, 그들은 목록에서 사용할 수 있습니다. 사전과 text_file에서 각 단어를 낮추거나 줄이거 나 구두점을 제거한 것으로 가정하면 위의 코드가 작동해야합니다. 그냥 귀하의 dict에있는 모든 값을 0으로 설정하고 단어가 indict인지 확인하여 파일을 반복하십시오.

new_dict = {word:0 for word in text_file} 

그것은 dictionary comprehension : 그것은 경우, 다음은 0으로 설정 값으로 사전을 생성 할 수있는 방법 1.

에 그 값을 설정합니다. 내 코드에서는 사과와 사과를 비교하는 모든 용어를 정규화한다고 가정합니다. 텍스트로 작업 할 때는 항상 중요합니다.

최종 수정. 고유 용어 목록이 두 개있는 경우 (토큰 화 및 정규화 후)

def normalize(term): 
    #do stuff -- i.e., lower; stem; strip punctuation; etc. 
    pass 
word_list_one = [normalize(word) for word in text_doc.split()] 
word_list_two = [normalize(word) for word in other_text_doc.split()] 

# if you know the longest of your lists, then you can create a dictionary of ones and zeros from the two lists. 
word_dict = dict([(word,1) if word in word_list_one else (word,0) for word in word_list_two]) 
# that's it. in the above code, word_list_two should be the longer of your two lists (assuming I understand your code properly) 
# Note: someone with more python experience could definitely improve my code. I just wanted show you another option. 

이 기능이 작동하는지 알려주십시오. 희망이 조금 도움이!

+0

답장을 보내 주셔서 감사합니다. 내가 쓴 것은 오해를 불러 일으켰다 고 생각합니다. 내가 언급 한 사전은 실제로 파이썬 사전이 아닙니다. 내가 독창적 인 또 다른 단어 목록과 같습니다 (정보 검색에서 고유 한 단어 집합을 의미하기 때문에이 단어를 사용했습니다), 내 질문을 편집하여 명확하게 나타냅니다 (미안합니다). 사실 내가 원하는 것은 단어 목록을 0 ​​또는 1로 벡터화하는 것입니다 (실제로는 귀하가 제공 한 것과 유사합니다). 그런 다음 벡터화 된 고유 단어를 사용하고 다른 텍스트 파일과 비교할 수 있습니다. – Yoshiaki

+0

@ 요시아키 (Yoshiaki)는 단어 목록에서 사전을 생성하고 모든 값을 0으로 설정하는 답변을 업데이트했습니다. –

+0

당신은 확실히 나를 도왔습니다! 귀하가 제공 한 코드에 대해 감사드립니다. 이제 남은 것은 사전 사이의 유사성을 계산하는 것입니다. 먼저이를 직접 시도해 보겠습니다. 다시 한번 감사합니다! – Yoshiaki

관련 문제