پردازش زبان طبیعی (NLP) برای متخصصان سئو از همیشه مهمتر شده است.
شروع به ساختن مهارتهایی که شما را برای همه تغییرات شگفت انگیز که در اطراف ما اتفاق می افتد بسیار مهم است.
امیدوارم این ستون شما را برای شروع کار انگیزه دهد!
ما می خواهیم NLP عملی را هنگام ساختن یک نمودار دانش ساده از ابتدا یاد بگیریم.
از آنجا که گوگل ، بینگ و سایر موتورهای جستجو از دانش دانش برای رمزگذاری دانش و غنی سازی نتایج جستجو استفاده می کنند ، چه راهی بهتر برای ساختن آنها وجود دارد؟
به طور خاص ، ما می خواهیم حقایق مفید را بطور خودکار از نقشه های نقشه موتور XML ژورنال استخراج کنیم.
برای انجام این کار و ساده و سریع کارها ، عناوین مقاله را از URL ها در نقشه های XML بیرون می آوریم.
ما اشخاص نامیده شده و روابط آنها را از عناوین استخراج خواهیم کرد.
سرانجام ، ما یک نمودار دانش قدرتمند خواهیم ساخت و محبوب ترین روابط را تجسم می کنیم.
در مثال زیر رابطه “راه اندازی می شود”.
روش خواندن نمودار پیروی از جهت فلش ها است: موضوع “راه اندازی” هدف – شی.
تبلیغات
ادامه خواندن در زیر
مثلا:
- “بینگ 19 نقشه ردیابی را راه اندازی کرد” ، که احتمالاً “بینگ نقشه ردیابی covid-19 را راه اندازی می کند.”
- مورد دیگر “اسنپ چت برنامه صدور گواهینامه تبلیغات را راه اندازی می کند.”
این حقایق و بیش از هزاران مورد دیگر به صورت خودکار استخراج و گروه بندی شدند!
بیایید سرگرم کننده شویم
در اینجا برنامه فنی است:
- همه نقشه های ژورنال موتور جستجوی XML را بارگیری می کنیم.
- ما URL ها را برای استخراج عناوین از شلغم ها تجزیه خواهیم کرد.
- ما جفت های موجودیت را از عناوین استخراج می کنیم.
- ما روابط مربوطه را استخراج خواهیم کرد.
- ما یک نمودار دانش ایجاد خواهیم کرد و یک شکل ساده در Colab ایجاد می کنیم تا روابط مورد نظر خود را تجسم کنیم.
واکشی همه نقشه های ژورنال موتور جستجو XML XML
من اخیراً با او گفتگویی روشنگری داشتم الیاس داباس از سوپر مارکت رسانه و درمورد کتابخانه شگفت انگیز پایتون برای بازاریابان یاد گرفتید: تبلیغات.
برخی از مقالات قدیمی موتور جستجو من با نسخه های جدیدتر کتابخانه کار نمی کنند. او به من ایده خوبی داد.
تبلیغات
ادامه خواندن در زیر
اگر نسخه های کتابخانه های شخص ثالث را الان چاپ کنم ، تهیه کد در آینده آسان خواهد بود.
من فقط نیاز به نصب نسخه هایی که کار می کنند در هنگام عدم موفقیت است. 🤓
%%capture !pip install advertools
import advertools as adv print(adv.__version__) #0.10.6
ما قصد داریم همه نقشه های ژورنال موتور جستجو را در یک قاب داده pandas با دو خط کد بارگیری کنیم.
sitemap_url = "https://www.searchenginejournal.com/sitemap_index.xml" df= adv.sitemap_to_df(sitemap_url)
یک ویژگی جالب در بسته بندی این است که تمام نقشه های پیوند شده را در فهرست بارگیری کرده و از یک فریم مناسب داده می گیریم.
نگاه کنید که فیلتر کردن مقالات / صفحات از امسال چقدر ساده است. ما 1،550 مقاله داریم.
df[df["lastmod"] > '2020-01-01']
عناوین را از URL ها استخراج کنید
کتابخانه adsools تابعی برای شکستن URL ها در چهارچوب داده دارد ، اما اجازه دهید این کار را بصورت دستی انجام دهیم تا با روند کار آشنا شویم.
from urllib.parse import urlparse import re
example_url="https://www.searchenginejournal.com/google-be-careful-relying-on-3rd-parties-to-render-website-content/376547/"
u = urlparse(example_url)
print(u) #output -> ParseResult(scheme='https', netloc='www.searchenginejournal.com', path='/google-be-careful-relying-on-3rd-parties-to-render-website-content/376547/', params='', query='', fragment='')
در اینجا ما به یک دست و پا زدن به نام ، ParseResult
، با تفکیک مؤلفه های URL.
ما علاقه مندیم path
.
ما قصد داریم از یک regex ساده برای تقسیم آن توسط / و – کاراکترها استفاده کنیم
slug = re.split("[/-]", u.path) print(slug)
#output ['', 'google', 'be', 'careful', 'relying', 'on', '3rd', 'parties', 'to', 'render', 'website', 'content', '376547', '']
بعد ، می توانیم آن را به یک رشته تبدیل کنیم.
headline = " ".join(slug) print(headline)
# خروجی
' google be careful relying on 3rd parties to render website content 376547 '
اسلایدها حاوی شناسه صفحه هستند که برای ما بی فایده است. ما با یک رجکس حذف خواهیم کرد.
headline = re.sub("d{6}", "",headline) print(headline)
#output ' google be careful relying on 3rd parties to render website content ' #Strip whitespace at the borders
headline = headline.strip()
print(headline)
#output 'google be careful relying on 3rd parties to render website content'
اکنون که این مورد را آزمایش کردیم ، می توانیم این کد را به یک تابع تبدیل کنیم و یک ستون جدید در قاب داده خود ایجاد کنیم.
def get_headline(url): u = urlparse(url) if len(u.path) > 1: slug = re.split("[/-]", u.path) new_headline = re.sub("d{6}", ""," ".join(slug)).strip() #skip author and category pages if not re.match("author|category", new_headline): return new_headline return ""
بیایید یک ستون جدید با عنوان عنوان ایجاد کنیم.
new_df["headline"] = new_df["url"].apply(lambda x: get_headline(x))
استخراج اشخاص نامگذاری شده
بیایید موجودات موجود در عناوین ما را بررسی و تجسم کنیم.
ابتدا آنها را در یک سند متنی واحد ترکیب می کنیم.
import spacy from spacy import displacy text = "n".join([x for x in new_df["headline"].tolist() if len(x) > 0]) nlp = spacy.load("en_core_web_sm") doc = nlp(text) displacy.render(doc, style="ent", jupyter=True)
ما می توانیم بعضی از موجودات را به درستی برچسب گذاری کنیم و برخی به اشتباه مانند Hulu به عنوان یک شخص نام برده شوند.
تبلیغات
ادامه خواندن در زیر
چندین فیس بوک مانند Facebook و Google Display Network نیز وجود دارد.
spaCy خارج از جعبه NER کامل نیست و به طور کلی برای بهبود تشخیص نیاز به آموزش با داده های سفارشی دارد ، اما این به اندازه کافی خوب است تا مفاهیم موجود در این آموزش را نشان دهد.
ساخت نمودار دانش
اکنون به قسمت مهیج می رسیم.
بیایید با ارزیابی روابط گرامری بین کلمات در هر جمله شروع کنیم.
ما این کار را با چاپ وابستگی نحوی موجودات انجام می دهیم.
for tok in doc[:100]: print(tok.text, "...", tok.dep_)
ما به دنبال سوژه ها و اشیاء مرتبط با یک رابطه هستیم.
تبلیغات
ادامه خواندن در زیر
ما برای تجزیه و تحلیل سوژه ها و اشیاء از عناوین از تجزیه گر مبتنی بر spaCy استفاده خواهیم کرد.
این قانون می تواند چیزی شبیه به این باشد:
سوژه / موضوع را به همراه اصلاح کننده های آن ، کلمات مرکب استخراج کنید و همچنین علائم نقطه گذاری را بین آنها استخراج کنید.
بیایید ابتدا کتابخانه های مورد نیاز خود را وارد کنیم.
from spacy.matcher import Matcher from spacy.tokens import Span import networkx as nx import matplotlib.pyplot as plt from tqdm import tqdm
برای ساختن نمودار دانش ، مهمترین چیزها گره ها و لبه های بین آنها است.
ایده اصلی این است که از هر جمله عبور کرده و دو لیست ایجاد کنید. یکی با موجودیت موجودیت و دیگری با روابط مربوطه.
ما قصد داریم دو عملکردی که توسط Data Scientist ، Prateek Joshi ایجاد شده است را قرض بگیریم.
- مورد اول ، get_entities موجودات اصلی و خصوصیات مرتبط را استخراج می کند.
- مورد دوم ، get_relations روابط متناظر بین موجودات را استخراج می کند.
بیایید آنها را بر روی 100 جمله آزمایش کنیم و ببینیم خروجی چگونه به نظر می رسد. من اضافه کردم len(x) > 0
برای جستجوی خطوط خالی.
for t in [x for x in new_df["headline"].tolist() if len(x) > 0][:100]: print(get_entities
بسیاری از استخراج ها عناصر از دست رفته یا عالی نیستند ، اما همانطور که ما عناوین زیادی داریم ، به هر حال باید بتوانیم حقایق مفیدی را استخراج کنیم.
تبلیغات
ادامه خواندن در زیر
اکنون ، اجازه دهید نمودار را بسازیم.
entity_pairs = [] for i in tqdm([x for x in new_df["headline"].tolist() if len(x) > 0]): entity_pairs.append(get_entities(i))
در اینجا چند جفت مثال وجود دارد.
entity_pairs[10:20]
#output [['chrome', ''], ['google assistant', '500 million 500 users'], ['', ''], ['seo metrics', 'how them'], ['google optimization', ''], ['twitter', 'new explore tab'], ['b2b', 'greg finn podcast'], ['instagram user growth', 'lower levels'], ['', ''], ['', 'advertiser']]
بعد ، بیایید روابط مربوطه را ایجاد کنیم. فرضیه ما این است که محمول در واقع فعل اصلی یک جمله است.
relations = [get_relation(i) for i in tqdm([x for x in new_df["headline"].tolist() if len(x) > 0])] print(relations[10:20]) #output
['blocker', 'has', 'conversions', 'reports', 'ppc', 'rolls', 'paid', 'drops to lower', 'marketers', 'facebook']
سپس ، روابط را رتبه بندی می کنیم.
pd.Series(relations).value_counts()[4:50]
در آخر ، اجازه دهید نمودار دانش را بسازیم.
# extract subject source = [i[0] for i in entity_pairs] # extract object target = [i[1] for i in entity_pairs] kg_df = pd.DataFrame({'source':source, 'target':target, 'edge':relations})
# create a directed-graph from a dataframe G=nx.from_pandas_edgelist(kg_df, "source", "target", edge_attr=True, create_using=nx.MultiDiGraph())
plt.figure(figsize=(12,12)) pos = nx.spring_layout(G) nx.draw(G, with_labels=True, node_color='skyblue', edge_cmap=plt.cm.Blues, pos = pos) plt.show()
این یک نمودار هیولا را ترسیم می کند ، که ، هر چند چشمگیر است ، اما به خصوص مفید نیست.
بیایید دوباره امتحان کنیم ، اما یک بار فقط یک رابطه برقرار کنیم.
تبلیغات
ادامه خواندن در زیر
برای انجام این کار ، ما تابعی را ایجاد می کنیم که متن رابطه را به عنوان ورودی (متن پررنگ) منتقل می کنیم.
def display_graph(relation): G=nx.from_pandas_edgelist(kg_df[kg_df['edge']==relation], "source", "target", edge_attr=True, create_using=nx.MultiDiGraph()) plt.figure(figsize=(12,12)) pos = nx.spring_layout(G, k = 0.5) # k regulates the distance between nodes nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_cmap=plt.cm.Blues, pos = pos) plt.show()
حالا ، وقتی دویدم display_graph("launches")
، من نمودار را در ابتدای مقاله می گیرم.
در اینجا چند رابطه دیگر است که من طرح کردم.
من یک نوت بوک Colab را با تمام مراحل موجود در این مقاله ایجاد کردم و در پایان فرم خوبی با روابط بسیار بیشتری پیدا خواهید کرد تا بررسی کنید.
تبلیغات
ادامه خواندن در زیر
فقط تمام کد ها را اجرا کنید ، روی انتخاب کننده pulldown کلیک کنید و بر روی دکمه play کلیک کنید تا نمودار را ببینید.
منابعی برای کسب اطلاعات بیشتر و پروژه های جامعه
در اینجا منابعی وجود دارد که در کنار هم گذاشتن این آموزش ، مفید واقع شده ام.
من از پیروانم خواستم تا پروژه های پایتون را به اشتراک بگذارند و هیجان زده شدم تا ببینم چند ایده خلاق از جامعه به وجود می آید! 🐍🔥
در اینجا یک اسکریپت پایتون ساده ساخته شده با پاندا و یک گزارش semrush برای خودکار سازی طبقه بندی هدف جستجو (می توان در مطالعات کلید واژه استفاده کرد): https://t.co/lDje8cw16Z
– کارولین شولز (carolscholles) 12 آگوست 2020
تبلیغات
ادامه خواندن در زیر
“اخیراً” چیست؟ پایتون و سلنیوم برای تجزیه و تحلیل یافته های جالب در SERP های تلفن همراه در ماه مارس استفاده می شود (پیوند به مقاله GitHub در مقاله) https://t.co/Eg5KxoqBi4
– دانیل (@ d4ni_s) 11 آگوست 2020
به طور خودکار فریاد فری و فانوس دریایی برای اجرای هفتگی در مشتریان و ذخیره اطلاعات در mysql. همچنین محاسبه فرکانس های کلمه در تمام صفحات مشتری ، در هر صفحه و در کل. مخلوط کردن داده ها از GSC ، GA ، SF و ahrefs.
– گرگ برنارد (@ GregBernhardt4) 12 آگوست 2020
ایجاد شکاف بین داده های PPC و داده های ارگانیک به طوری که می توانیم شروع به اختصاص مقادیر تبدیل به کلمات کلیدی ارگانیک کنیم. از NLP و زنجبیل استفاده می کند.
– اندی چادویک (digitalquokka) 12 آگوست 2020
👉 ابداع دستگاه تولید تصاویر توصیفی alt متن با برچسب تصویر / تشخیص شی (پاک کردن)
👉 دوره ای تجزیه و تحلیل 3 سری برتر گوگل برای لیست کلمات کلیدی برای ردیابی تغییرات (و نقشه برداری با تغییرات رتبه).
track ردیابی محتوای رقابت با تجزیه XML / wp-json.
1/2
– ونوس کالرا (venuskalra) 12 آگوست 2020
👉 ارسال 5XX از پرونده های log to slack برای حل کردن قبل از کشف GSC.
👉 قصد به نقشه برداری url
2/2
– ونوس کالرا (venuskalra) 12 آگوست 2020
تبلیغات
ادامه خواندن در زیر
تجزیه و تحلیل کوهورت برای پیش بینی مشتریان آینده و منجر به شمارش؟
– عمر ایگان (@ Umar26338572) 12 آگوست 2020
هی هملت!
من هنوز تحلیلگر موجودیت خود را که اکنون هر دو از آن استفاده می کنند ، درحال باز کردن هستم googlecloud و spacy_io! 🐍🔥
من همچنین اشتباه کرده ام که این برنامه اکنون وضعیت جلسه را از طریق یک گونه گونه حفظ می کند streamlit هک! 😏
من به محض آماده شدن به اشتراک می گذارم. 🙌https: //t.co/CTSLk1IYS6 pic.twitter.com/N59MfzLsy9
– Charly Wargnier (DataChaz) 11 آگوست 2020
no llego al nivel de DataChaz pero estoy intentando hacer categorización de palabras para keywordsresearch en bulk con clusterización y regresión lineal، as hay dos maneras de ver como poder hacer estas categorizaciones y elegir la que más te gusta
– JaviLázaro (JaviLazaroSEO) 11 آگوست 2020
منابع بیشتر:
اعتبار تصویر
تمام تصاویر گرفته شده توسط نویسنده ، آگوست 2020