Prosesu treigladau gyda meddalwedd: Gwahaniaeth rhwng fersiynau
Oddi ar Hedyn
Hywelm (sgwrs | cyfraniadau) Wedi ychwanegu cod Python |
|||
(Ni ddangosir y 11 golygiad yn y canol gan 4 defnyddiwr arall) | |||
Llinell 5: | Llinell 5: | ||
Dw i eisiau datblygu ategyn WordPress i ychwanegu treigladau cywir i chwilio. Ar hyn o bryd mae angen chwilio am 'Caer', 'Gaer', 'Nghaer' ar wahan. Gyda'r ategyn byddai modd chwilio am un ohnonyn nhw yn unig a derbyn canlyniadau gyda phob fersiwn. | Dw i eisiau datblygu ategyn WordPress i ychwanegu treigladau cywir i chwilio. Ar hyn o bryd mae angen chwilio am 'Caer', 'Gaer', 'Nghaer' ar wahan. Gyda'r ategyn byddai modd chwilio am un ohnonyn nhw yn unig a derbyn canlyniadau gyda phob fersiwn. | ||
Felly... os ydyn ni'n gallu sgwennu ffug-cod gyda'n gilydd byddai modd sgwennu'r ategyn a rhyddhau'r cod dan GPL. | Felly... os ydyn ni'n gallu sgwennu ffug-cod gyda'n gilydd byddai modd sgwennu'r ategyn a rhyddhau'r cod dan [[Trwydded gyhoeddus gyffredinol GNU (GPL yn Gymraeg)| GPL]]. | ||
Er mwyn cael prosiect haws: | Er mwyn cael prosiect haws: | ||
Llinell 14: | Llinell 14: | ||
--[[Defnyddiwr:Carlmorris|Carlmorris]] ([[Sgwrs Defnyddiwr:Carlmorris|sgwrs]]) 20:20, 5 Hydref 2012 (BST) | --[[Defnyddiwr:Carlmorris|Carlmorris]] ([[Sgwrs Defnyddiwr:Carlmorris|sgwrs]]) 20:20, 5 Hydref 2012 (BST) | ||
Dyma ddolen at ramadeg Cymraeg Kevin Donnelly: [http://thinkopen.co.uk/git/?p=autoglosser;a=blob;f=cygrammar.txt;h=535436dee5d4d09a9430ee9131ca7cf36078e2cc;hb=a85df32b69ea7355138ed094be1c34ee5bff9663]--[[Defnyddiwr:Hywel|hywelm]] ([[Sgwrs Defnyddiwr:Hywel|sgwrs]]) 23:41, 16 Hydref 2012 (BST)hywelm | |||
== Y treigladau == | == Y treigladau == | ||
Llinell 78: | Llinell 79: | ||
== Y | == Y ffug-god == | ||
<nowiki> | <nowiki> | ||
Llinell 114: | Llinell 115: | ||
</nowiki> | </nowiki> | ||
== Cod MySQL == | == Cod MySQL i chwilio gyda threigladau == | ||
Fe wnes i geisio ar beth tebyg gan ddefnyddio cod "LIKE" mewn chwiliad MySQL. Nes i erioed ei gwblhau, ond y syniad oedd gennyf oedd cwtogi y 3 llythyren oddi ar flaen gair, gan mai dene fydd y nifer fwyaf o lythrennau posib sy'n gysylltiedig â'r treiglo, wedyn defnyddio "LIKE" i geisio paru gweddill y gair gyda chronfa data wedi ei seilio ar eiriadur rhydd. | Fe wnes i geisio ar beth tebyg gan ddefnyddio cod "LIKE" mewn chwiliad MySQL. Nes i erioed ei gwblhau, ond y syniad oedd gennyf oedd cwtogi y 3 llythyren oddi ar flaen gair, gan mai dene fydd y nifer fwyaf o lythrennau posib sy'n gysylltiedig â'r treiglo, wedyn defnyddio "LIKE" i geisio paru gweddill y gair gyda chronfa data wedi ei seilio ar eiriadur rhydd. | ||
Cod dwi eisoes yn ei ddefnyddio ydi hwn, sydd bellach tu ôl i | Cod dwi eisoes yn ei ddefnyddio ydi hwn, sydd bellach tu ôl i http://www.efrydydd.com (dwi wedi bod yn gweithio arno'n ddiweddar): | ||
<nowiki> | <nowiki> | ||
$chwilio = "SELECT id, cymraeg_u, saesneg_u, cenedl_c, cenedl_s FROM termau WHERE dangos='1' AND cymraeg_u LIKE '%$allweddair%' OR saesneg_u LIKE '%$allweddair%'"; | $chwilio = "SELECT id, cymraeg_u, saesneg_u, cenedl_c, cenedl_s FROM termau WHERE dangos='1' AND cymraeg_u LIKE '%$allweddair%' OR saesneg_u LIKE '%$allweddair%'"; | ||
Os nad oes gair yn gallu cael ei baru, bydd y tri llythyren cyntaf yn cael ei basio ymlaen at system cyfaddawdu, ble bydd yn dyfalu be gall fod, gan roi restr o bosibiliadau. | |||
</nowiki> | </nowiki> | ||
== Perl == | |||
Darn bach o Perl i roi amrywiadau o air wedi treiglo. Dydi hwn ddim yn parchu maint llythrennau, fel y ffug-god uchod, ond gan bod SQL ddim chwaith, does dim angen rili. | |||
<nowiki>my @geiriau = treiglo('gair'); | |||
BEGIN { | |||
my %t=(p=>['b','mh','ph'],t=>['d','nh','th'],c=>['g','ngh','ch'],b=>['f','m'],d=>['dd','n'],g=>['','ng'],ll=>['l'],'m'=>['f'],rh=>['r']); | |||
sub treiglo{$_[0]=~/^([cpt](?!h)|d(?!d)|[gbm]|ll|rh)(.*)$/io ? map{$_.$2} @{$t{$1}} : undef} | |||
}</nowiki> | |||
== PHP == | |||
Fersiwn sydyn o’r uchod yn PHP. Lot hyllach na’r fersiwn Perl wrth gwrs ;-) | |||
<nowiki>$geiriau = treiglo('gair'); | |||
function treiglo($gair){ | |||
static $t=array('p'=>array('b','mh','ph'),'t'=>array('d','nh','th'),'c'=>array('g','ngh','ch'),'b'=>array('f','m'),'d'=>array('dd','n'),'g'=>array('','ng'),'ll'=>array('l'),'m'=>array('f'),'rh'=>array('r')); | |||
$g=array(); | |||
if (preg_match('/^([cpt](?!h)|d(?!d)|[gbm]|ll|rh)(.*)$/i',$gair,$m)){ | |||
foreach($t[strtolower($m[1])] as $x) $g[]=$x.$m[2]; | |||
return $g; | |||
} | |||
return null; | |||
}</nowiki> | |||
== Python 2.6 == | |||
Rwy'n meddwl ei fod yn gweithio'n iawn ond heb ei ddefnyddio'n iawn --[[Defnyddiwr:Hywel|hywelm]] ([[Sgwrs Defnyddiwr:Hywel|sgwrs]]) 00:00, 25 Hydref 2012 (BST) | |||
<nowiki>def treiglo(gair): | |||
tabl = {} | |||
fersiynau = [gair] | |||
tabl["c"] = ["g","ngh","ch"] | |||
tabl["p"] = ["b","mh","ph"] | |||
tabl["t"] = ["d","nh","th"] | |||
tabl["g"] = ["","ng"] | |||
tabl["b"] = ["f","m"] | |||
tabl["d"] = ["dd","n"] | |||
tabl["m"] = ["f"] | |||
tabl["ll"] = ["l"] | |||
tabl["rh"] = ["r"] | |||
llafariaid = "aeiouwy" | |||
gair_gwreiddiol = gair | |||
gair = gair.lower() | |||
if tabl.has_key(gair[:2]): | |||
gair_heb_flaen = gair[2:] | |||
llyth_dreigl = tabl[gair[:2]] [0] | |||
gair_treigl = llyth_dreigl + gair_heb_flaen | |||
fersiynau.append(gair_treigl) | |||
else: | |||
gair_heb_flaen = gair[1:] | |||
llyth_flaen = gair[0] | |||
if tabl.has_key(llyth_flaen): | |||
for ll in tabl[llyth_flaen]: | |||
gair_treigl = ll + gair_heb_flaen | |||
fersiynau.append(gair_treigl) | |||
elif llyth_flaen in llafariaid: | |||
gair_treigl = 'h'+ gair | |||
fersiynau.append(gair_treigl) | |||
else: | |||
#ddim yn treiglo | |||
pass | |||
""" | |||
os byddwch yn chwilio am ymadrodd yn lle gair, bydd y darn canlynol yn newid llythrennau blaen | |||
y geiriau, heblaw am y cyntaf, i ddechrau gyda llythyren fach - eisiau ei gywiro | |||
""" | |||
if gair_gwreiddiol.isupper(): | |||
for g in range(0, len(fersiynau)): | |||
fersiynau[g] = fersiynau[g].capitalize() | |||
return fersiynau | |||
if __name__ == '__main__': | |||
gair = raw_input("Pa air?") | |||
chwilio_am = treiglo(gair) | |||
print chwilio_am | |||
</nowiki> | |||
== Ategyn WordPress == | |||
Wedi nocio rhywbeth sydyn at ei gilydd a'i rhoi mewn ategyn efo ambell beth defnyddiol arall dwi'n defnyddio ar safleoedd Cymraeg (trefnolion dyddiad a chywiro collnodau ar eiriau fel 'sdim). Dydi'r SQL ddim yn arbennig o effeithlon, ond mae'n dilyn patrwm WordPress. Croeso i rywun awgrymu pethau eraill i ychwanegu. Neu addasu yn ôl yr angen. [IS] | |||
http://slebog.net/pecynnau/wordpress/cymraeg/cymraeg.zip |
Golygiad diweddaraf yn ôl 23:00, 24 Hydref 2012
Esboniad
Mae angen cod agored i adnabod treigladau. Byddai gymaint o bosibiliadau!
Dw i eisiau datblygu ategyn WordPress i ychwanegu treigladau cywir i chwilio. Ar hyn o bryd mae angen chwilio am 'Caer', 'Gaer', 'Nghaer' ar wahan. Gyda'r ategyn byddai modd chwilio am un ohnonyn nhw yn unig a derbyn canlyniadau gyda phob fersiwn.
Felly... os ydyn ni'n gallu sgwennu ffug-cod gyda'n gilydd byddai modd sgwennu'r ategyn a rhyddhau'r cod dan GPL.
Er mwyn cael prosiect haws:
- Efallai gwnawn ni ddechrau gyda'r fersiwn 'geiriadur' o'r gair yn unig - yn yr enghraifft mae pobl yn debygol i chwilio am 'Caer' yn hytrach nag unrhyw fersiwn arall.
- Anghofia gwrywaidd a benywaidd ar hyn o bryd (byddai angen rhestr o eiriau fel arall)
O'n i'n meddwl bod system gyda http://kevindonnelly.org.uk/ ond dw i'n methu ffeindio fe. Hefyd bydda'r broses datblygu yn hwyl! --Carlmorris (sgwrs) 20:20, 5 Hydref 2012 (BST)
Dyma ddolen at ramadeg Cymraeg Kevin Donnelly: [1]--hywelm (sgwrs) 23:41, 16 Hydref 2012 (BST)hywelm
Y treigladau
Llythyren Meddal Trwynol Llais H-bom p b mh ph t d nh th c g ngh ch b f m d dd n g /hwyl fawr g/ ng m f ll l rh r aeiouwy rhoi h arno!
Y ffug-god
// cynhyrchu llinyn gyda phob fersiwn o'r gair // e.e. mewnbwn Caer yn cael allbwn 'Caer NEU Gaer NEU Nghaer NEU Chaer' llinyn cynhyrchu_treigladau(llinyn $gair) { llinyn $chwiliad = $gair; os ydy'r llythyren gyntaf o'r $gair ar y tabl? { // ydy felly mae'r gair yn gallu treiglo cer trwy pob llythyren ar y tabl { $chwiliad += 'NEU'; $chwiliad += cyfnewid_llythyren_gyntaf($gair); // parchu maint y llythyren (C yn newid i G, c yn newid i g) } $chwiliad = '(' + $chwiliad + ')'; } fel arall { // nac ydy felly dyw'r gair ddim yn dreiglo // e.e. aderyn, Aberystwyth, // byddai $chwiliad == $gair } dychwelyd $chwiliad; } llinyn chwilio(llinyn mewnbwn_chwiliad) { cer trwy pob $gair ym $mewnbwn_chwiliad { cyfnewid cynhyrchu_treigladau($gair) am $gair } }
Cod MySQL i chwilio gyda threigladau
Fe wnes i geisio ar beth tebyg gan ddefnyddio cod "LIKE" mewn chwiliad MySQL. Nes i erioed ei gwblhau, ond y syniad oedd gennyf oedd cwtogi y 3 llythyren oddi ar flaen gair, gan mai dene fydd y nifer fwyaf o lythrennau posib sy'n gysylltiedig â'r treiglo, wedyn defnyddio "LIKE" i geisio paru gweddill y gair gyda chronfa data wedi ei seilio ar eiriadur rhydd.
Cod dwi eisoes yn ei ddefnyddio ydi hwn, sydd bellach tu ôl i http://www.efrydydd.com (dwi wedi bod yn gweithio arno'n ddiweddar):
$chwilio = "SELECT id, cymraeg_u, saesneg_u, cenedl_c, cenedl_s FROM termau WHERE dangos='1' AND cymraeg_u LIKE '%$allweddair%' OR saesneg_u LIKE '%$allweddair%'"; Os nad oes gair yn gallu cael ei baru, bydd y tri llythyren cyntaf yn cael ei basio ymlaen at system cyfaddawdu, ble bydd yn dyfalu be gall fod, gan roi restr o bosibiliadau.
Perl
Darn bach o Perl i roi amrywiadau o air wedi treiglo. Dydi hwn ddim yn parchu maint llythrennau, fel y ffug-god uchod, ond gan bod SQL ddim chwaith, does dim angen rili.
my @geiriau = treiglo('gair'); BEGIN { my %t=(p=>['b','mh','ph'],t=>['d','nh','th'],c=>['g','ngh','ch'],b=>['f','m'],d=>['dd','n'],g=>['','ng'],ll=>['l'],'m'=>['f'],rh=>['r']); sub treiglo{$_[0]=~/^([cpt](?!h)|d(?!d)|[gbm]|ll|rh)(.*)$/io ? map{$_.$2} @{$t{$1}} : undef} }
PHP
Fersiwn sydyn o’r uchod yn PHP. Lot hyllach na’r fersiwn Perl wrth gwrs ;-)
$geiriau = treiglo('gair'); function treiglo($gair){ static $t=array('p'=>array('b','mh','ph'),'t'=>array('d','nh','th'),'c'=>array('g','ngh','ch'),'b'=>array('f','m'),'d'=>array('dd','n'),'g'=>array('','ng'),'ll'=>array('l'),'m'=>array('f'),'rh'=>array('r')); $g=array(); if (preg_match('/^([cpt](?!h)|d(?!d)|[gbm]|ll|rh)(.*)$/i',$gair,$m)){ foreach($t[strtolower($m[1])] as $x) $g[]=$x.$m[2]; return $g; } return null; }
Python 2.6
Rwy'n meddwl ei fod yn gweithio'n iawn ond heb ei ddefnyddio'n iawn --hywelm (sgwrs) 00:00, 25 Hydref 2012 (BST)
def treiglo(gair): tabl = {} fersiynau = [gair] tabl["c"] = ["g","ngh","ch"] tabl["p"] = ["b","mh","ph"] tabl["t"] = ["d","nh","th"] tabl["g"] = ["","ng"] tabl["b"] = ["f","m"] tabl["d"] = ["dd","n"] tabl["m"] = ["f"] tabl["ll"] = ["l"] tabl["rh"] = ["r"] llafariaid = "aeiouwy" gair_gwreiddiol = gair gair = gair.lower() if tabl.has_key(gair[:2]): gair_heb_flaen = gair[2:] llyth_dreigl = tabl[gair[:2]] [0] gair_treigl = llyth_dreigl + gair_heb_flaen fersiynau.append(gair_treigl) else: gair_heb_flaen = gair[1:] llyth_flaen = gair[0] if tabl.has_key(llyth_flaen): for ll in tabl[llyth_flaen]: gair_treigl = ll + gair_heb_flaen fersiynau.append(gair_treigl) elif llyth_flaen in llafariaid: gair_treigl = 'h'+ gair fersiynau.append(gair_treigl) else: #ddim yn treiglo pass """ os byddwch yn chwilio am ymadrodd yn lle gair, bydd y darn canlynol yn newid llythrennau blaen y geiriau, heblaw am y cyntaf, i ddechrau gyda llythyren fach - eisiau ei gywiro """ if gair_gwreiddiol.isupper(): for g in range(0, len(fersiynau)): fersiynau[g] = fersiynau[g].capitalize() return fersiynau if __name__ == '__main__': gair = raw_input("Pa air?") chwilio_am = treiglo(gair) print chwilio_am
Ategyn WordPress
Wedi nocio rhywbeth sydyn at ei gilydd a'i rhoi mewn ategyn efo ambell beth defnyddiol arall dwi'n defnyddio ar safleoedd Cymraeg (trefnolion dyddiad a chywiro collnodau ar eiriau fel 'sdim). Dydi'r SQL ddim yn arbennig o effeithlon, ond mae'n dilyn patrwm WordPress. Croeso i rywun awgrymu pethau eraill i ychwanegu. Neu addasu yn ôl yr angen. [IS]