sql >> Database >  >> RDS >> Mysql

Hoe het dilemma van het opslaan van menselijke namen in MySQL op te lossen en zowel onderscheidbaarheid als een zoekopdracht naar vergelijkbare namen te behouden?

Wat handig is, is als je de volledige naam kunt ontleden in "naamwoorden" en een fonetische codering (metafoon of een van de vele andere keuzes) voor elk van hen kunt opslaan. Je hebt echter alleen het idee van naamwoorden nodig, niet specifiek als eerste, middelste of laatste, wat prima is, want die categorieën werken sowieso niet goed in alle culturen). Maar u kunt later in de rangschikking positionele orderinformatie gebruiken, zodat zoeken naar "Paul Carl" beter overeenkomt met "Paul Karl" dan "Carl Paul". U moet zich bewust zijn van dubbelzinnige interpunctie waarvoor mogelijk meerdere versies van sommige naamwoorden moeten worden opgeslagen. Bre-Anna Heim zou bijvoorbeeld worden opgesplitst in de naamwoorden "bre", "anna", "breanna" en "heim". Soms is het streepje niet relevant zoals Bre-Anna, maar soms niet zoals in Sally-June". Bre-Anna gebruikt nooit alleen Bre of Anna, maar Sally-June gebruikt soms gewoon Sally of alleen June. Het is moeilijk om te weten welke, dus dekken beide mogelijkheden.

U kunt uw zoekopdracht hiertegen opstellen door de volledige naam die u zoekt op dezelfde manier te ontbinden en fonetisch te coderen. Uw zoekopdracht kan bijvoorbeeld de volledige namen retourneren die twee of meer fonetische overeenkomsten met de naam van de component hebben (of één als er maar één naam in de zoekopdracht of de bron is). Dit geeft u een subset van volledige namen om verder te overwegen. Je zou een eenvoudige rangschikking van ze kunnen bedenken, of zelfs zoiets als een algoritme voor het matchen van afstanden op deze subset, wat rekenkundig te duur zou zijn om te doen tegen de hele miljoen namen. Als ik afstandsvergelijking zeg, heb ik het over online algoritmen zoals Levenshtein-afstand en dergelijke.

(edit) De redenering hiervoor is het behandelen van zaken zoals de volgende naam:Maria de los Angeles Gomez-Rodriguez. Eén persoon die gegevens invoert, mag Maria Gomez gewoon invoeren. Een ander zou Maria Gomez Rodriguez kunnen binnengaan. Misschien komt er nog een andere Maria Angeles Rodrigus binnen.



  1. Oracle:Zoeken in volledige tekst met voorwaarde

  2. Nieuwe Oracle-compatibiliteitsfuncties in PostgresPlus Advanced Server 9.3Beta

  3. Hoe gebruik je alfanumerieke velden met BETWEEN-clausule in Mysql?

  4. Hoe u uw PostgreSQL-databases kunt beschermen tegen cyberaanvallen met SQL Firewall