Python WordCloud tidak menghapus Stopwords

Saya mencoba membuat Wordcloud yang secara otomatis mengambil kata-kata dari deskripsi pekerjaan dan membuat Wordcloud. Jika Anda memiliki stopwords=None, itu seharusnya menghapus daftar stopwords yang diketahui di wordcloud, tetapi program saya tidak. Saya yakin ini mungkin ada hubungannya dengan cara saya menarik deskripsi pekerjaan dengan sup yang enak. Saya butuh bantuan untuk menarik kata-kata secara berbeda dengan beautifulsoup atau saya tidak menggunakan stopwords dengan benar.

import requests
# pip install bs4
from bs4 import BeautifulSoup
# pip install wordcloud
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Goes to a job description
url = "https://career.benteler.jobs/job/Paderborn-Head-of-Finance-&-Controlling-North-America-NW/604307901/?locale=en_US"
html_text = requests.get(url).text
soup = BeautifulSoup(html_text, 'html.parser')

# Goes through all the words in the beautiful soup text
combinedWords = ''

for words in soup.find_all('span'):
    separatedWords = words.text.split(' ')
    combinedWords += " ".join(separatedWords) + ' '

# creates wordcloud
resumeCloud = WordCloud(stopwords=None, background_color='white', max_words=75, max_font_size=75, random_state=1).generate(combinedWords)

plt.figure(figsize=(8, 4))
plt.imshow(resumeCloud)
plt.axis('off')
plt.show()

person Brandon Jacobson    schedule 01.07.2020    source sumber
comment
Apakah ini menjawab pertanyaan Anda? Mengapa menghentikan kata-kata yang tidak dikecualikan dari kata cloud saat menggunakan pustaka wordcloud Python?   -  person barny    schedule 01.07.2020
comment
Duplikat stackoverflow.com/questions/61953788/   -  person barny    schedule 01.07.2020
comment
@barny, yang kedua pasti membantu. Mengatur collocations=False berhasil. Terima kasih.   -  person Brandon Jacobson    schedule 01.07.2020


Jawaban (1)


Masalah utamanya adalah semua kode ada dalam satu blok. Coba bagi logika menjadi beberapa metode dan uji setiap bit satu per satu. Permintaan tidak memeriksa kesalahan (misalnya server mungkin tidak tersedia tetapi hal ini seharusnya tidak menjadi masalah sekarang.)

BeautifulSoup mengekstraksi semua elemen span pada halaman. Artinya akan menyertakan menu/footer. Jika Anda menginginkan deskripsi pekerjaan, maka Anda mungkin ingin memilih rentang dengan deskripsi pekerjaan nama kelas. Setelah itu Anda dapat memanggil teks untuk menghapus html. Saya tidak yakin apakah Anda perlu menghapus hal-hal lain seperti koma & titik.

Saya tidak punya pengalaman dengan Word Cloud. Namun dalam kode di bawah ini mengembalikan sesuatu yang tampak seperti hasil.

import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def get_job_html(url):
    response = requests.get(url)
    response.raise_for_status() # check for 4xx & 5xx errors
    return response.text

def extract_combined_words(html):
    soup = BeautifulSoup(html, 'html.parser')
    job_description = soup.find("span", {"class": "jobdescription"}).text.replace('\n', ' ') # Target span with class jobdescription. text will strip out html.
    print(job_description) # TODO - Check this is the results you expect?
    return job_description

def create_resume_cloud(combinedWords):
    return WordCloud(stopwords=None, background_color='white', max_words=75, max_font_size=75, random_state=1).generate(combinedWords)

def plot_resume_cloud(resumeCloud):
    plt.figure(figsize=(8, 4))
    plt.imshow(resumeCloud)
    plt.axis('off')
    plt.show()

def run(url):
    html = get_job_html(url)
    combinedWords = extract_combined_words(html)
    resumeCloud = create_resume_cloud(combinedWords)
    plt = plot_resume_cloud(resumeCloud)
    return plt # TODO - not sure how the results gets consumed

if __name__ == '__main__':
    run("https://career.benteler.jobs/job/Paderborn-Head-of-Finance-&-Controlling-North-America-NW/604307901/?locale=en_US")
person Greg    schedule 01.07.2020
comment
inilah yang saya cari untuk membersihkan data. Selain itu, orang lain juga memberi saya solusi WordCloud. Terima kasih!!!!! - person Brandon Jacobson; 01.07.2020