Zephyrnet Logosu

Web Siteleri için LDA Algoritmasını Kullanma

Tarih:

Hiç bir dizi belgede benzersiz konular bulmak zorunda kaldınız mı? Varsa, muhtemelen Latent Dirichlet Allocation (LDA) ile çalışmışsınızdır.

LDA şu şekilde çalışır:

Algoritma, üzerinde çalıştığınız belgelerde aynı kelime kümelerini arar ve sözde benzersiz konular oluşturur. Bunlar, belgelerde bazı sıklıkta ortaya çıkan konulardır.

LDA, çevrimiçi içerik üretimi için yaygın olarak kullanılmaktadır. Bu algoritma özellikle satış ve pazarlamada faydalıdır.

Şirketiniz için bir logo oluşturmak istediğinizi varsayalım. İşletmenizi en iyi şekilde temsil edecek ve müşteri çekecek olanı nasıl bulabilirsiniz? Cevap, mevcut vakaları incelemek ve rakiplerin stratejilerini gözden geçirmektir.

Etkili bir logo oluşturmak için rakiplerin web sitelerinden veri toplamalısınız. Yani, sizin için hedefle ilgili konu kümeleri oluşturmak için web sitelerini ayrıştırmanız ve LDA uygulamanız gerekir. Elde ettiğiniz sonuçlara göre, alanınızla en sık ilişkilendirilen anahtar kelimeleri ana hatlarıyla belirleyebilecek ve çekici bir logo oluşturabileceksiniz.

Veya içeriğinizi SEO araştırmasına dayalı olarak optimize etmek istediğinizi varsayalım. LDA'yı uygulamak, her kümede anahtar kelimeler içeren benzersiz konu kümeleri toplamanıza olanak tanır.. Sonuçlara göre, içeriğinizi arama motorları için anlamsal olarak değerli hale getirecek şekilde ayarlayabilirsiniz.

LDA'yı yalnızca web siteleri için değil, her türlü metinsel veri için kullanabilirsiniz.

Bu nedenle, benzersiz konular oluşturmak için LDA'yı kullanmak istiyorsanız, analiziniz için kullanılacak çok sayıda belgeye veya web sitesine sahip olmanız gerekir.

Ama hepsi bu değil: doğru sonuçlar elde etmek için önce veri kümesinden durdurma sözcüklerini çıkarmanız gerekir. Durdurma sözcükleri, "o", "sizin", "o", "a" gibi analizde değeri olmayan sözcüklerdir.

Durdurulan kelimeleri silmenin yanı sıra, HTML, CSS, JavaSript SEO ile ilgili şeyleri ve LDA analizi ile ilgili olmayan diğer kelimeleri silmeniz gerekir. Bu çok mu karmaşık görünüyor? Her şeyi ortaya koyalım.

Bu yazıda, web sitelerini ayrıştırırken LDA ile nasıl benzersiz konuların oluşturulacağını tartışacağız.

LDA Algoritmasını Kullanmaya Nasıl Başlanır?

Web sitelerini LDA ile ayrıştırmak için öncelikle dosya işleme ve HTML, CSS, JavaScript metinlerini temizlemek için gerekli kitaplıkları içe aktarmanız gerekir. LDA çözümleyicisini de içe aktaracaksınız:

import os
import re
import gensim
import nltk
import time
import random
import itertools
import pandas as pd
from string import digits
from wordcloud import WordCloud
from gensim.utils import simple_preprocess
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from tqdm.notebook import tqdm, trange
import gensim.corpora as corpora
from bs4 import BeautifulSoup

Ardından, analiz etmeniz gereken web sitesi sayısını seçin. Numuneniz ne kadar büyük ve kesinse, LDA sonuçları o kadar doğru olacaktır.

Burada numunenin hem niceliği hem de niteliği önemlidir. Yani, bir konu oluşturma için gerekli anahtar kelimeleri içerebilecek tek tip bir web sitesi örneği oluşturmalısınız.

Ardından, belgeleri okumak için kullanılacak klasörü seçin:

entries = os.listdir('./dataset_htmls/')

Ardından, seçilen web sitelerini okuyun ve HTML, CSS, JavaScript'in ön temizliğini yapın:

def cleanDocument(html): soup = BeautifulSoup(html, "html.parser") for script in soup(["script", "style"]): script.extract() text = soup.get_text() lines = (line.strip() for line in text.splitlines()) chunks = (phrase.strip() for line in lines for phrase in line.split(" ")) text = 'n'.join(chunk for chunk in chunks if chunk) return text start_time = time.time() files = [0] * files_number df = pd.DataFrame(data={}, columns = ['text']) for i in range(files_number): with open("./dataset_htmls/" + entries[i], "r", encoding='utf-8') as f: try: text = cleanDocument(f.read()) text = re.sub(r'bw{1,2}b', '', text) df = df.append({'text': text}, ignore_index=True) except: files[i] = " " print("problem with file" + entries[i]) print("--- %s seconds ---" % (time.time() - start_time))

Ne zaman LDA kullanıyorsanız, web siteleri oluşturmak için Angular, Vue, React, WordPress ve daha fazlası gibi çok sayıda çerçeve olduğunu unutmayın. Ayrıca, Wix veya Tilda gibi kodsuz bir teknik kullanarak web siteleri oluşturmanıza izin veren birçok hazır web sitesi oluşturucu vardır. Ve her geliştirici, web siteleri oluşturmak için kendi en iyi uygulamalarını kullanır.

Sorun, çoğu sorunun geliştiricilerin kullandığı sözde "kirli bilgisayar korsanlığı" nedeniyle ortaya çıkmasıdır. Bu kirli hack'lerle web siteleri, LDA için sorun teşkil eden ayrıştırıcı ve analizciyi atlar.

LDA Algoritması Nasıl Çalışır?

CSS ile başlayalım. Stilleri tanımlamanın aşağıdaki yollarını tespit ettiğinizden emin olun:

  • Satır içi CSS — HTML etiketlerinde stil niteliğinin kullanımı
  • Başlık bölümündeki satır içi CSS — kullanımı
    <style> 

    belge başlığında

  • Bir dosya gibi harici CSS — kullanımı
    <link>

    CSS dosyası yüklemek için

HTML için etiketlerin silinmesi önemlidir ancak bu etiketlerin içeriklerinin silinmemesi önemlidir. Aynısı JavaScript için de geçerli. Bunu yapmanın bir yolu normal ifadeler kullanmaktır:

df['text'] = df['text'].map(lambda x: re.sub('<[^<]+?>', '', x))
df['text'] = df['text'].map(lambda x: re.sub('(?s)<style>(.*?)</style>', '', x))
df['text'] = df['text'].map(lambda x: re.sub(r'<script.+?</script>', '', x, flags=re.DOTALL))

Ancak, bu tür yöntemlerle ilgili bir sorun var. Tek etiketler, JavaScript eklentileri ve web uygulamaları oluşturmanın çeşitli yollarını kullanmak, HTML, CSS ve JavaScript'i tamamen kaldıramayacağınız anlamına gelir. Ancak bunu bir sitenin giriş dosyalarında kolayca kontrol edebilirsiniz.

Bu yüzden bu makaleyi yazmak için bs4 kütüphanesini kullandım. Temizlemeyi test etmek için, web öğelerinin kaldırılmasıyla ilgili önemli bir hatanın tespit edilmediği 1,000 web sitesi seçtim. Böylece bu kitaplığı kullanabilir ve LDA analiziyle ilgili olmayan web öğelerini de kaldırabilirsiniz.

cleanDocument

fonksiyonu.

Bir sonraki adım, iki kelimeden oluşan karmaşık kelimeleri silmektir. Bu sorunu çözmek için aşağıdaki normal ifadeyi kullanın:

text = re.sub(r'bw{1,2}b', '', text)

Temizlenen tüm metin şuraya kaydedilir:

df

veri çerçeveleri. Algoritmanın çalışmasını değerlendirmek için çalışma süresine bakın. 100 web sitesi için çalışma süresi yaklaşık 5 saniyedir.

Bir sonraki göreviniz durma sözcükleri için temiz. Durdurma sözcükleri, bahsettiğim gibi, "the", "sen", "kendisi" gibi analiz değeri taşımayan sözcükleri ifade eder. Durdurulan sözcükleri temizlemek için İngilizce için standart sözcüklerin bir listesini indirin.

Durdurma sözcükleri dışında, hemen hemen her web sitesinde kullanılan standart sözdizimini göz önünde bulundurun. Örneğin, "bize ulaşın", "çerezler", "onayla", "geri dön" gibi kelimeler. Sonra bu kelimeleri durma kelimeleri listenize ekleyin. Ayrıca temizlik yaparken SEO optimizasyonunda kullanılan "standart" kelime grubunu gözden geçirin.

other_stop_words = [ 'contact', 'cookies', 'confirm', 'website', 'share', ] nltk.download('stopwords')
stop_words = stopwords.words('english')
stop_words.extend(other_stop_words) def sent_to_words(sentences): for sentence in sentences: yield(gensim.utils.simple_preprocess(str(sentence), deacc=True)) def remove_stopwords(texts): return [[word for word in simple_preprocess(str(doc)) if word not in stop_words] for doc in texts] data = df['text'].values.tolist()
data_words = list(sent_to_words(data)) data_words = remove_stopwords(data_words)

Tebrikler! Yolun yarısındasın. Sıradaki ne? LDA algoritması için bir kelime sözlüğü oluşturmanız gerekir:

id2word = corpora.Dictionary(data_words)
texts = data_words
corpus = [id2word.doc2bow(text) for text in texts] num_topics = 10
lda_model = gensim.models.LdaMulticore(corpus=corpus, id2word=id2word, num_topics=num_topics) print(lda_model.print_topics())

Önemli not: kesin sonuçlar elde etmek için, metni temizlemek için kullanılacak durma sözcükleri sözlüğü yapmanız gerekir. Bu prosedürün çıktısını görmek için, tüm metindeki kelimelerin sıklık sayımını kullanın. Bu, hangi kelimelerin en sık geçtiğini belirlemenizi sağlar:

def freq(data_words): df = pd.DataFrame({}, columns=['Word', 'Frequency']) unique_words = set(data_words) for word in unique_words: df = df.append({'Word' : word, 'Frequency' : data_words.count(word)}, ignore_index=True) return df data_words = itertools.chain.from_iterable(data_words)
data_words = list(data_words)
frequency = freq(data_words)
frequency = frequency.sort_values(by="Frequency", ascending=False)
frequency.to_csv('frequency.csv')

LDA Analizi Sonuçları

Sonuçları gözden geçirelim. Programlama dillerini öğrenmek için kurslar sağlayan 10 web sitesini örnek olarak kullanacağız.

Yukarıdaki algoritmaya dayanarak 10 web sitesini ayrıştırdım ve analizle ilgisi olmayan tüm kelimeleri kaldırdım.

LDA analizinin ilk sonucunu aşağıdaki görselde görebilirsiniz:

Aşağıda, frekans analizinin sonuçlarını görebilirsiniz:

Frekans analizi, kelimelerin arama anahtarı olarak kullanılabileceği SEO optimizasyonu için bilgi sağlar. Ancak, benzer ve "değerli" sözcüklerden oluşan bir küme bulmak için metni temel sözcüklerden temizlemelisiniz. Bizim durumumuzda, temel kelimeler şunları içerir:

'course', 'learn', 'programming', 'lpa', 'code', 'courses', 'java', 'learning', 'get', 'one', 'python', 'see', 'pluralsight', 'web', 'org', 'become', 'javascript', 'android', 'may', 'site', 'developer.'

Bu kelimeleri frekans analizine veya LDA algoritmasının sonuçlarına göre tanımlayabilirsiniz. n yineleme.

Temel kelimeleri temizledikten sonra aşağıdaki sonucu elde ederiz:

Aslında çıktı sonucu, aşağıdaki sözcük kümesini içeren bir konu kümesidir:

Team, students, read, review, free, skills, reviews, path, data, project, build, masterclass, instructor, job, etc. 

İstediğiniz sonuçları elde edene kadar konuları manuel olarak ve yinelemeli olarak temizlemeniz gerektiğini unutmayın. Bu tür algoritmalarda sadece kelimelerin köklerini elde edersiniz. Sonlar, çoğul biçimler ve yinelenen sözcükler reddedilecektir.

Hepsi bu kadar — daha fazla bilgiyle ilgileniyorsanız, şuraya göz atmanızı rica ederim: tam kod.

Yukarı tamamlayan

LDA'nın konu modellemenin etkili bir yolu olabileceğini görebilirsiniz. Yukarıdaki sonuçlara dayanarak, logonuz için doğru kelime kombinasyonunu kolayca seçebilirsiniz.

Ayrıca mevcut içeriğinizi optimize edebilir ve sonuçlara göre daha iyi performans gösterecek şekilde ayarlayabilirsiniz.

LDA'nın avantajı, işlevlerinin esnek olması gerçeğinde yatmaktadır. Amacı öncelikle matematikseldir, bu nedenle LDA'nın çalışmasını ihtiyaçlarınıza göre ayarlayabilirsiniz.

Dezavantajı, sonuçları manuel olarak cilalamanız gerekmesidir. Bu daha fazla zaman alsa da sonunda daha kesin sonuçlar elde edersiniz. Bu nedenle, pazarlama ve SEO ile ilgileniyorsanız, LDA kullanmak, içerik oluşturmaya daha derinlemesine dalmak için mükemmel bir yoldur.

Bu makaleyi birlikte yazdığınız için özel teşekkürler Volodia Andrushchak, @KeenEthics'te Tam Yığın Yazılım Geliştiricisi. Nesnelerin İnterneti ve Yapay Zeka ile ilgili diğer yararlı okumalarla ilgileniyorsanız, Volodi'nin diğer makalelerine göz atın: https://keenethics.com/blog

Okuduğunuz için teşekkür ederim ve içtenlikle umarım faydalı bulmuşsunuzdur!

Etiketler

Hacker Noon'a Katılın

Özel okuma deneyiminizin kilidini açmak için ücretsiz hesabınızı oluşturun.

Coinsmart. Europa İçindeki En İyi Bitcoin-Börse
Kaynak: https://hackernoon.com/using-the-lda-algorithm-for-websites-sj1v35ag?source=rss

spot_img

En Son İstihbarat

spot_img