2013-05-20 43 views
22

Từ Creating a subset of words from a corpus in R, người trả lời có thể dễ dàng chuyển đổi một term-document matrix thành một đám mây từ dễ dàng.Làm thế nào để tạo một đám mây từ từ một kho văn bản bằng Python?

Có chức năng tương tự từ thư viện python có hoặc là một textfile từ thô hoặc NLTK corpus hoặc Gensim Mmcorpus thành một đám mây từ?

Kết quả sẽ trông hơi như thế này: enter image description here

+1

Sau khi thực hiện lại một số điên rồ, đây là plugin không biết xấu hổ nhưng đây không phải là giải pháp 'sklearn' sử dụng mã của Andreas Mueller. https://github.com/alvations/translation-cloud – alvas

Trả lời

10

Trong trường hợp bạn cần những đám mây từ để hiển thị chúng trong trang web hoặc ứng dụng web, bạn có thể chuyển đổi dữ liệu sang định dạng json hoặc csv và tải dữ liệu đó vào thư viện trực quan hóa JavaScript như d3. Word Clouds on d3

Nếu không, câu trả lời của Marcin là một cách hay để làm những gì bạn mô tả.

3

Ví dụ mã amueller trong hành động

Trong dòng lệnh/thiết bị đầu cuối:

sudo pip install wordcloud 

Sau đó chạy python script:

# Simple WordCloud 
from os import path 
from scipy.misc import imread 
import matplotlib.pyplot as plt 
import random 

from wordcloud import WordCloud, STOPWORDS 

text = 'all your base are belong to us all of your base base base' 
wordcloud = WordCloud(font_path='/Library/Fonts/Verdana.ttf', 
         relative_scaling = 1.0, 
         stopwords = {'to', 'of'} # set or space-separated string 
        ).generate(text) 
plt.imshow(wordcloud) 
plt.axis("off") 
plt.show() 

enter image description here

+0

Thực ra đây là một đám mây từ khá lừa đảo. Cho rằng nó được chuẩn hóa dựa trên các điểm ảnh và độ dài của từ mặc dù số đếm là như nhau, đó là lý do tại sao Hoa Kỳ lớn hơn cơ sở. – alvas

+0

Xem tài liệu. Cốt truyện có thể được thay đổi cho stopwords và relative_scaling (tần số so với xếp hạng khi các từ mở rộng). Theo mặc định relative_scaling là 0 (Rank), tôi tin rằng bạn đang tìm kiếm relative_scaling = 1.0 (Frequency). – MyopicVisage

+0

Bạn có thể đặt câu trả lời đó vào câu trả lời không? Và cũng tạo ra các đám mây từ khác nhau với 1.0? Cảm ơn! Điều đó sẽ giúp người đọc trong tương lai =) – alvas

1
from wordcloud import WordCloud, STOPWORDS 
stopwords = set(STOPWORDS) 

def show_wordcloud(data, title = None): 
    wordcloud = WordCloud(
     background_color='white', 
     stopwords=stopwords, 
     max_words=200, 
     max_font_size=40, 
     scale=3, 
     random_state=1 # chosen at random by flipping a coin; it was heads 
    ).generate(str(data)) 

    fig = plt.figure(1, figsize=(12, 12)) 
    plt.axis('off') 
    if title: 
     fig.suptitle(title, fontsize=20) 
     fig.subplots_adjust(top=2.3) 

    plt.imshow(wordcloud) 
    plt.show() 

show_wordcloud(Samsung_Reviews_Negative['Reviews']) 
show_wordcloud(Samsung_Reviews_positive['Reviews']) 

enter image description here

Các vấn đề liên quan