깨끗한 원 - 라이너에서 히스토그램을 만드는 데 많은 질문을했지만 가능한 한 효율적으로 만들려는 사람을 아직 찾지 못했습니다. 저는 현재 검색 알고리즘을위한 많은 tfidf 벡터를 만들고 있습니다. 그리고 이것은 매우 짧고 읽기 쉽지만 원하는만큼 빠르지는 않지만 많은 히스토그램과 현재 코드를 만드는 것을 포함합니다. 슬프게도, 저는 훨씬 느린 것으로 판명 된 다른 많은 방법을 시도했습니다. 빨리 할 수 있니? cleanStringVector는 문자열 목록 (모두 소문자, 구두점 없음)이며 masterWordList는 cleanStringVector 내의 모든 단어를 포함해야하는 단어 목록입니다. 카운터 개체 대신 KeyError를 제기의 존재하지 않는 키에 0을 반환하는 사실은 심각한 플러스와 다른 질문에 히스토그램 방법의 대부분이 테스트에 실패 협조 할파이썬에서 가장 효율적인 히스토그램 코드
from collections import Counter
def tfidfVector(cleanStringVector, masterWordList):
frequencyHistogram = Counter(cleanStringVector)
featureVector = [frequencyHistogram[word] for word in masterWordList]
return featureVector
.
예 :
["apple", "orange", "tomato", "apple", "apple"]
["tomato", "tomato", "orange"]
["apple", "apple", "apple", "cucumber"]
["tomato", "orange", "apple", "apple", "tomato", "orange"]
["orange", "cucumber", "orange", "cucumber", "tomato"]
과의 마스터 단어 목록 : 나는 다음과 같은 데이터가있는 경우
:["apple", "orange", "tomato", "cucumber"]
을 나는 각각 각 테스트 케이스에서 다음의 반환을 부탁합니다
[3, 1, 1, 0]
[0, 1, 2, 0]
[3, 0, 0, 1]
[2, 2, 2, 0]
[0, 2, 1, 2]
도움이 되었기를 바랍니다.
대략적인 최종 결과 : 이것은 파이썬 3 크기 (1 개) 명령에 의해 내 대표성 마이크로 벤치 마크에서 런타임을 향상
Original Method: 3.213
OrderedDict: 5.529
UnorderedDict: 0.190
을만큼 안정해야합니까 'cleanStringVector'는 어떻게 보이나요? – chenaren
오, 단지 문자열 목록 일뿐입니다. 지금 당장은 직선적 인 파이썬리스트이지만, 원하면 숫자가 적은 배열이라고 가정합니다. –
[여기] (http://stackoverflow.com/questions/2870466/python-histogram-one-liner) 방법을 벤치마킹 해 보셨습니까? –