Prosesu treigladau gyda meddalwedd

== 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: --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]
http://slebog.net/pecynnau/wordpress/cymraeg/cymraeg.zip