2017-12-12 9 views
0

그래서 MongoDB에 title (그리고 많은 다른 것들)이라는 필드가있는 아이템을 가지고 있습니다.팬들 데이터 프레임을 사용하는 nGram 주파수

나는 그래서 다음 막대 그래프를 렌더링하고 내 코드, 사물을 볼 수 있습니다, 예를 들어, 예상 된 결과가

{ 
    "christmas 2017": 30, 
    "foo bar": 4, 
    "apple iphone": 10, 
    ... 
} 

것이 가장 많이 사용되는 단어를 전체 시간을 검색 할

나는 '이 작업을 수행 할 수 있습니다 '하지만 그것도 나에게 한 번만 쓸모가 없기 때문에 원하지 않는 주파수 1 번을 가진 ngram을 제공하므로 쓸모없는 정보가됩니다.

이 점은 제목에서 가장 일반적인 단어를 얻는 것입니다. 좋은 ngram 범위는 2-3 단어가 될 것입니다. 1은 충분하지 않고 3 이상은 너무 구체적이기 때문입니다.

노력하고 있습니다 내 코드,하지만 난이 줄을 그려 말할 필요도없이

vector = CountVectorizer(ngram_range=(2,2), analyzer='word') 
n_gram = vectorizer.fit_transform(df[text_field]) 
frequencies = n_gram.toarray().sum(axis=0) 
results = pd.DataFrame(frequencies, index=vectorizer.get_feature_names(), columns=['frequency']) 
results.plot.bar() 

(이를 달성하기 위해 어쩌면 또한 더 나은 방법) 비 반복 것들을 탐을 얻을 수있는 방법이 필요합니다 , 무의미한 정보 (방금 1 빈도)를 가지고 있습니다.

그리고이 코드를 사용하여 description과 같은 긴 텍스트 필드를 구문 분석하여 가장 많은 정보를 정리해야합니다. 중고 물건.

보너스로, 스크립트에 최소한의 반복 빈도를 말할 수만 있다면, 그것은 굉장 할 것이므로 나중에 어떤 요구에도 맞을 수 있습니다.

답변

0

nGram을 얻은 후에 도움이되기를 바랍니다.

nG=["apple iphone","apple iphone","apple iphone","apple iphone", "christmas 2017","christmas 2017","apple iphone","apple iphone", "foo bar","christmas 2017","christmas 2017","christmas 2017","christmas 2017","apple iphone"] from collections import Counter import heapq nG=Counter(nG) ng

출력 :

Counter({'apple iphone': 7, 'christmas 2017': 6, 'foo bar': 1})

또 다른 명령 :

heapq.nlargest(5,nG,key=nG.get)

출력 :

['apple iphone', 'christmas 2017', 'foo bar']

+0

좋은 답변이지만 원래 스크립트에서와 같이 nGrams> x를 dict'{ "apple iphone": 7}'에있는 수와 함께 어떻게 출력 할 수 있습니까? [apple apple "]' 원하는 결과가 그 정보가 담긴 줄거리이기 때문에 –