Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
14
rozdział1Pakietymyśli(przeglądNLP)
internetowej.Zamiasttegoużyjemywyrażeniaregularnego,abyrozpoznaćkilkapopu-
larnychpozdrowieńużywanychprzezludzinapoczątkukonwersacji:
WPythoniemamydwafloficjalne”pakietydla
Znakfl|”oznaczaflOR”(LUB),asymbolefl\*”,
wyrażeńregularnych.Używamytupakieturetylko
żepoprzedzającejeznakimogąpojawićsię0
dlatego,żejestonzainstalowanywewszystkich
lubwięcejrazyinadalpasowaćdowzorca.Tak
wersjachPythona.Pakietregexdostarczanyjest
więcnaszregexbędziedopuszczałpozdrowienia
zpóźniejszymiwersjamijęzykaimaznacznie
zaczynającesięodflhi”,flhello”lubflhey”,po
większemożliwości,cozobaczyciewrozdziale2.
którychnastąpidowolnaliczbaznakówspacji,
>>>importre
apotemdowolnaliczbaliter.
>>>r="(hi|hello|hey)[]*([a-z]*)"
>>>re.match(r,'HelloRosa',flags=re.IGNORECASE)
<-sre.SRE-Matchobject;span=(0,10),match='HelloRosa'>
>>>re.match(r,"hiho,hiho,it'sofftowork...",flags=re.IGNORECASE)
<-sre.SRE-Matchobject;span=(0,5),match='hiho'>
>>>re.match(r,"hey,what'sup",flags=re.IGNORECASE)
<-sre.SRE-Matchobject;span=(0,3),match='hey>
stosowane,abywyrażenie
literwtekściejestczęsto
Ignorowaniewielkości
regularnebyłoprostsze.
Wwyrażeniachregularnychmożeciewnawiasachkwadratowychoznaczyćklasęzna-
ków.Możecieteżużyćkreski(-),abywskazaćzakresznakówbezkoniecznościwpisywa-
niaichwszystkichpojedynczo.Takwięcwyrażenieregularnepostaci
"[a-z]"
będzie
pasowaćdokażdejmałejlitery,od„a”do„z”.Gwiazdka(*)poklasieznakówoznacza,
żewyrażenieregularnebędziepasowaćdodowolniedługiegociąguznaków,jeślitylko
znakibędąnależećdotejsamejklasyznaków.
Przekształćmynaszewyrażenieregularnewpostaćbardziejszczegółową,abyspró-
bowaćuzyskaćzgodnośćzwiększąliczbąpozdrowień:
Możecietakskompilowaćwyrażenieregularne,
abyścieniemusielipodawaćkonkretnychopcji
(flag)przykażdymichużyciu.
>>>r=r"[^a-z]*([y]o|[h']?ello|ok|hey|(good[])?(morn[gin']{0,3}|"\
...
r"afternoon|even[gin']{0,3}))[\s,;:]{1,3}([a-z]{1,20})"
>>>re-greeting=re.compile(r,flags=re.IGNORECASE)
>>>re-greeting.match('HelloRosa')
<-sre.SRE-Matchobject;span=(0,10),match='HelloRosa'>
>>>re-greeting.match('HelloRosa').groups()
Zauważcie,żetowyrażenieregularne
('Hello',None,None,'Rosa')
niemożerozpoznać(match)słów
>>>re-greeting.match("GoodmorningRosa")
zliterówkami(niebędziezgodności).
<-sre.SRE-Matchobject;span=(0,17),match="GoodmorningRosa">
>>>re-greeting.match("GoodManningRosa")
>>>re-greeting.match('GoodeveningRosaParks').groups()
('Goodevening','Good','evening','Rosa')
>>>re-greeting.match("GoodMorn'nRosa")
<-sre.SRE-Matchobject;span=(0,16),match="GoodMorn'nRosa">
>>>re-greeting.match("yoRosa")
<-sre.SRE-Matchobject;span=(0,7),match='yoRosa'>
Naszchatbotmożepodzielićróżneczęścipozdrowienia
nagrupy,aleniebędzieświadomynazwiskaRosy,gdyż
niemamywzorcadopasowaniadlaliterpoimieniu.