Diffbot's Knowledge Graph-ն ունի պարզ նպատակ՝ ձեր մատների ծայրին հասցնել բոլոր գիտելիքների հանրագումարը որոնման միջոցով, որն ընդգծում է տվյալներն ու հարաբերությունները պարզ տեքստի վրա հիմնված որոնման համակարգի փորձի վրա: Ողջ համացանցից ստացված Գիտելիքի գրաֆիկը թույլ է տալիս կատարել բարդ հարցումներ միլիարդավոր տվյալների կետերի դեմ անմիջապես պարզ API-ի միջոցով: Ես որոշեցի պտտվել իրենց API-ով և ստեղծել «համեմատաբար» պարզ գործիք՝ նորությունների վերլուծություն ավտոմատ հարթակում աշխատող արտադրանքի համար: Պետք է հեշտ լինի, չէ՞: Եկեք հասնենք դրան: Նկատի ունեցեք, որ այս բլոգի գրառման օրինակները ենթադրում են, որ դուք ստացել եք անվճար բանալի Diffbot-ից: Համոզվեք, որ դա արեք նախքան նմուշները փորձելը:
Նախքան կոդ գրելը, ես մուտք գործեցի Diffbot և բացեցի նրանց տեսողական որոնման գործիքը Գիտելիքի գրաֆիկի համար: Գործիքը թույլ է տալիս հարցումներ ստեղծել տեսողականորեն կամ ձեռքով: Հարցումները հայտնի են որպես «DQL» հայտարարություններ Diffbot-ում և բավականին պարզ են կարդալու համար, նույնիսկ եթե նախկինում երբեք չեք տեսել շարահյուսությունը:
Այս գործիքից ես սկսեցի ընտրելով կազմակերպության տեսակը: Սա այն տվյալների բարձր մակարդակի տեսակն է, որը ես ուզում եմ որոնել և կարող է լինել բազմաթիվ տարբերակներից մեկը՝ մարդկանցից մինչև իրադարձություններ, ֆիլմեր և ներդրումներ: Ես ընտրեցի «Հոդվածը», քանի որ իմ նպատակն է գտնել նորություններ, որոնք վատ են խոսում իմ հրաշալի արտադրանքի մասին: Այնուհետև ես ընտրեցի «Զտել ըստ» տարբերակը: Թեև դուք կարող եք զտել ըստ էության տեսակի ցանկացած հատկության, ես օգտագործել եմ tags.label
, քանի որ այն ավելի ճշգրիտ համընկնում է, քան պարզ տեքստային որոնումը: Թեև տեքստային ֆիլտրն աշխատում է, tags.label
օգտագործումը շատ ավելի լավ արդյունք է տալիս՝ ապահովելով, որ արդյունքները կենտրոնացած են իմ որոնման վրա, այլ ոչ թե պատահաբար նշելով այն: Իմ ցուցադրության համար ես կփնտրեմ հոդվածներ «XBox»-ի մասին:
Ես նաև օգտագործել եմ «Տեսակավորել ըստ» արժեքը՝ սկզբում նորագույնը ցուցադրելու համար և այս որոնումը տեսնելու համար՝ արդյոք իմ արդյունքներն իմաստ ունեն:
Թեև իմ սկզբնական արդյունքները չեն ներառել որևէ օտարալեզու արդյունք, ես գիտեի, որ կցանկանայի զտել արդյունքները անգլերենով, ուստի հաջորդաբար ավելացրի լեզվի զտիչ: Սեղմելով + նշանը ընթացիկ ֆիլտրով, ես կարողացա ավելացնել լեզուն և en
անգլերենի համար: Կրկին սեղմեցի որոնումը.
Լավ, այնպես որ, հաջորդը, ես ուզում եմ զտել միայն բացասական արդյունքների: Գիտելիքի գծապատկեր Հոդվածների սուբյեկտներն ունեն տրամադրությունների գնահատական (դուք կարող եք տեսնել դրանք որոնման արդյունքներում), որը գնում է -1-ից մինչև ամենաբացասականը մինչև 1-ը մինչև ամենադրականը: Սկզբում ես պարզապես ընտրում էի 0-ից փոքր կամ հավասար տրամադրություններ ունեցող տարրեր:
Woot, հասնել այնտեղ: Որպես վերջին քայլ՝ ես գիտեի, որ սա ավտոմատացվելու է և զտվելու է «վերջին» տարրերի մեջ, ուստի ավելացրի ևս մեկ զտիչ, այս անգամ date
, ընտրվելուց after
և ընտրեցի մեկ շաբաթ առաջվա ամսաթիվը:
Այս պահին հարցումը լավ տեսք ունի, ուստի եկեք պատճենենք գործիքի կողմից տրամադրված հարցման արժեքը.
type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date
Հարցման ձևավորումն իսկապես դժվար մասն էր: Կոդի համար ես գնացի Որոնման փաստաթղթեր: Օրինակները հիմնված են curl/HTTP-ի վրա, բայց բավականին հեշտ է տեղափոխել Python կամ որևէ այլ լեզու: Հաշվի առեք այս նմուշը.
import os import requests import json import urllib.parse token = os.environ.get("db_token") query = 'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date' apiCall = f"https://kg.diffbot.com/kg/v3/dql?type=query&token={token}&query={urllib.parse.quote(query)}&size=25" req = requests.get(apiCall) results = json.loads(req.content) print(f"Total results, {results['hits']}") for result in results["data"]: print(result["entity"]["title"]) print(result["entity"]["date"]["str"]) print(result["entity"]["summary"]) if "author" in result["entity"]: print(result["entity"]["author"]) print(result["entity"]["siteName"]) print(result["entity"]["pageUrl"]) print(result["entity"]["sentiment"]) print("------------------------------------")
Խզելով սա - ես սկսեցի իմ հարցումը տեսողական գործիքից: Այն այնուհետև կոդավորվում է URL-ը և փոխանցվում Գիտելիքի գրաֆիկի API-ին: Միակ իրական նոր տարրն այնտեղ size=25
ի ավելացումն է՝ արդյունքը խելամիտ սահմանաչափի վրա պահելու համար:
Ես կանչում եմ API-ն, տպում եմ հայտնաբերված ընդհանուր արդյունքները ( hits
արդյունքից) և այնուհետև կրկնում եմ յուրաքանչյուրի վրա՝ ցույց տալով արդյունքից ստացված տարբեր տեղեկություններ: Ահա մի քանի արդյունքներ.
Total results, 68 Xbox will release its first handheld gaming console this year, report claims d2025-03-10T19:37 Windows Central expects the console to take advantage of the widgets on the Xbox Game Bar to let use... Jacob Siegal BGR https://bgr.com/entertainment/xbox-will-release-its-first-handheld-gaming-console-this-year-report-claims/ 0 ------------------------------------ Rumour: Next-Gen Xbox a 'PC in Essence' - What Would That Mean for PlayStation? d2025-03-10T19:00 Recent comments from Windows Central's executive editor Jez Corden have sparked discussion about whe... Stephen Tailby Push Square https://www.pushsquare.com/news/2025/03/rumour-next-gen-xbox-a-pc-in-essence-what-would-that-mean-for-playstation 0 ------------------------------------ Xbox handheld out this year and will go up against Nintendo Switch 2 says source d2025-03-10T18:50 New rumours about Microsoft's next gen plans suggests that there will be two Xbox handheld consoles ... GameCentral Metro http://metro.co.uk/2025/03/10/xbox-handheld-this-year-will-go-nintendo-switch-2-says-source-22703266/ 0
Սա աշխատում է, բայց հիմա եկեք ամսաթիվը դինամիկ դարձնենք: Ես սկսեցի ներմուծել datetime
.
from datetime import datetime, timedelta
Այնուհետև ես ստեղծեցի նախորդ շաբաթվա ձևաչափված ամսաթիվը.
today = datetime.now() lastWeek = today + timedelta(days=-7) fLastWeek = lastWeek.strftime("%Y-%m-%d")
Եվ վերջին կետն այն էր, որ այդ ամսաթիվը պարզապես ներառեի իմ հարցման մեջ.
query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date'
Նախնական տարբերակի ամբողջական կոդը կարող եք տեսնել այստեղ , իսկ վերջնական տարբերակը ՝ այստեղ :
Լավ, ժամանակն է ավտոմատացնել սա: Իմ ավտոմատացման համար ես կօգտագործեմ Pipedream-ը ՝ աշխատանքի հոսքի անհավանական ճկուն համակարգ, որը ես նախկինում բազմիցս օգտագործել եմ: Ահա կառուցված յուրաքանչյուր մասի ամբողջ աշխատանքային ընթացքը.
Ես սկսեցի իմ աշխատանքային հոսքը պարզ ժամանակացույցի վրա հիմնված ձգանով, այսինքն՝ երբ գործարկել: Սա որոշ չափով կամայական էր, բայց ես ընտրեցի շաբաթական, կիրակի օրը, ժամը 13:00-ին:
Հաջորդ քայլը՝ getArticles
, մշակում է այն տրամաբանությունը, որը ես ցուցադրեցի ավելի վաղ, բայց այժմ «Pipedream handler»-ում, որը Pipedream-ի աշխատանքային հոսքում կոդը քայլեր գրելու ստանդարտ եղանակն է:
import os import requests import json from datetime import datetime, timedelta import urllib.parse def handler(pd: "pipedream"): token = os.environ.get("db_token") today = datetime.now() lastWeek = today + timedelta(days=-7) fLastWeek = lastWeek.strftime("%Y-%m-%d") query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date' apiCall = f"https://kg.diffbot.com/kg/v3/dql?type=query&token={token}&query={urllib.parse.quote(query)}&size=25" req = requests.get(apiCall) return json.loads(req.content)
Հաջորդ քայլը պարզապես արագ կոդային քայլ է՝ ավարտելու աշխատանքային հոսքը, եթե արդյունքներ չգտնվեն.
def handler(pd: "pipedream"): if len(pd.steps["getArticles"]["$return_value"]["data"]) == 0: pd.flow.exit("No results")
Հիմա ես ուզում եմ մի փոքր «մերսել» արդյունքները: Ի վերջո, ես պատրաստվում եմ սա էլփոստով ուղարկել ինքս ինձ, այնպես որ ես կառուցեցի մի քայլ՝ արդյունքները գեղեցիկ տողով ձևաչափելու համար.
from datetime import datetime def handler(pd: "pipedream"): email = f""" Negative Article Results: Our search found {pd.steps["getArticles"]["$return_value"]["hits"]} results. Here are the top 25: """ for result in pd.steps["getArticles"]["$return_value"]["data"]: date = datetime.fromtimestamp(result["entity"]["date"]["timestamp"] / 1000) date_f = date.strftime("%Y-%m-%d") email += f""" {result["entity"]["title"]} Sentiment: {result["entity"]["sentiment"]} Published: {date_f} Link: {result["entity"]["pageUrl"]} """ return email
Կրկին, սա ինչ-որ չափով կամայական է այն առումով, ինչ ես բավական կարևոր էի համարում ներառելու համար: Դուք, անկասկած, կարող եք ավելի շքեղ լինել, և նույնիսկ անել այնպիսի բաներ, ինչպիսիք են՝ «իրոք վատ տրամադրության դեպքում, ավելացնել գույներ, կարմիր դրոշներ և այլն»:
Վերջնական քայլը պարզապես ինքս ինձ արդյունքները էլեկտրոնային փոստով ուղարկելն էր: Pipedream-ն աջակցում է «էլփոստ ուղարկել հաշվի սեփականատիրոջը» քայլին, որը կկատարի հենց դա, էլ. Եթե ես սա կառուցեի հաճախորդի համար, ես կօգտագործեի փոստի API-ների համար ներկառուցված Pipedream-ի բազմաթիվ քայլերից մեկը:
Գործարկվելուց հետո ես ստանում եմ գեղեցիկ էլ.
Եթե որոշեք միացնել Pipedream-ին, կարող եք գտնել իմ աշխատանքային հոսքը այստեղ՝ https://github.com/cfjedimaster/General-Pipedream-AI-Stuff/tree/production/report-on-sentiment-p_gYCeNbG
Սա Diffbot's Knowledge Graph API-ի օգտագործման ընդամենը մեկ օրինակ է, և որպես հիշեցում, հոդվածները միայն այն բազմաթիվ տարբեր տեսակի տվյալներից են, որոնք կարող եք որոնել: Այն ամենը, ինչ ես արել եմ այստեղ, նույնպես արվել է ամբողջովին անվճար հաշվի վրա, այնպես որ դուք կարող եք բացարձակապես գրանցվել և փորձել ինքներդ: Ես պատրաստվում եմ ավելի մանրամասն ուսումնասիրել այս հարցը, այնպես որ, եթե հարցեր ունեք, տեղեկացրեք ինձ: