A Gale-Church-algoritmus egy statikus szövegszegmentáló algoritmus, amelyet bilingual (kétnyelvű) szövegek igazítására terveztek, például mondatok illesztésére egy forrásnyelvi és célnyelvi szöveg között. A módszert William A. Gale és Kenneth W. Church dolgozta ki 1991-ben.
---
---
* A forrásnyelvi és célnyelvi mondatok hossza (karakterek száma) között lineáris összefüggés van. * Ha egy mondat hosszabb a forrásnyelven, akkor általában hosszabb a célnyelven is.
* A mondatok hosszának különbségét egy normális eloszlás alapján modellezik:
ahol:
* \( l \): a forrásnyelvi mondat és a célnyelvi mondat hosszának különbsége, * \( \mu \): a várható érték, * \( \sigma \): a szórás.
* A mondatok illesztéséhez egy dinamikus programozási táblát építünk, ahol a cél a költség minimalizálása.
---
* Forrásnyelvi mondatok listája: * Célnyelvi mondatok listája:
* A mondatok hosszának különbségét a fenti valószínűségi modell becsüli.
* A táblázat kitöltésével keressük meg a lehetséges mondatillesztéseket, amelyek minimalizálják a költséget.
---
* Hozz létre egy -es dinamikus programozási táblázatot, ahol a forrásnyelvi mondatok száma, a célnyelvi mondatok száma.
* A költség a mondatok hosszának különbsége alapján számítandó.
* Engedélyezett illesztési típusok: * 1-1: Egy forrásnyelvi mondat illeszkedik egy célnyelvi mondathoz. * 1-0 vagy 0-1: Egy mondat kimarad (hiányzó pár). * 1-2 vagy 2-1: Mondatok összevonhatók vagy szétbonthatók.
* A dinamikus programozási tábla alapján rekonstruáljuk az optimális mondatpárokat.
---
import numpy as np
def gale_church_align(source, target):
"""
Gale-Church algoritmus egyszerű implementációja.
"""
n = len(source)
m = len(target)
dp = np.zeros((n + 1, m + 1))
backtrack = np.zeros((n + 1, m + 1), dtype=int)
# Költségfüggvény
def cost(s_len, t_len):
diff = abs(s_len - t_len)
return diff # Egyszerű költség
# Dinamikus programozás
for i in range(1, n + 1):
for j in range(1, m + 1):
c1 = dp + cost(len(source), len(target))
c2 = dp + cost(len(source), 0)
c3 = dp + cost(0, len(target))
dp = min(c1, c2, c3)
backtrack = np.argmin()
# Visszafejtés
alignment =
i, j = n, m
while i > 0 and j > 0:
if backtrack == 0:
alignment.append((source, target))
i -= 1
j -= 1
elif backtrack == 1:
alignment.append((source, None))
i -= 1
else:
alignment.append((None, target))
j -= 1
return alignment
# Példa
source_sentences =
target_sentences =
alignment = gale_church_align(source_sentences, target_sentences)
print("Illesztett mondatpárok:")
for s, t in alignment:
print(f"Source: {s} | Target: {t}")
---
* Hosszúsági korrelációra épít, ami könnyen számítható.
* A dinamikus programozás segítségével lineáris időben fut.
---
* A nyelvtani eltérések vagy fordítási különbségek esetén pontatlan lehet.
* Csak a mondatok hosszát vizsgálja.
---
* Gépi fordításhoz használt kétnyelvű adatok előállítása.
* Kétnyelvű dokumentumok mondatainak illesztése.
* Fordítási párhuzamosságok feltérképezése.
A Gale-Church-algoritmus egyszerűsége és hatékonysága miatt széles körben használt nyelvtechnológiai feladatokban.