Ich habe einen sehr einfachen (80% wahrscheinlich) Regex, den ich in Perl hatte, ausgegraben und einige glückliche C # -Gruppennamen hinzugefügt:
%code%
Ich poste als Wiki, also kann jeder etwas hinzufügen, von dem er denkt, dass es helfen würde!
Ich mache eine Website-Migration, bei der Vorname und Nachname aus dem vollständigen Namen extrahiert werden. Wenn diese vom Endbenutzer erstellt wurden, existieren alle Arten von Permutationen (obwohl Englisch und allgemein nicht zu fremdartig). Meistens kann ich das erste Wort als Vornamen und das letzte Wort als den Nachnamen nehmen, aber einige Ausnahmen von dem gelegentlichen Präfix und Suffix. Als ich die Daten durchging und versuchte, alle wahrscheinlichen Ausnahmen zu verstehen, wurde mir klar, dass dies ein häufiges Problem ist, das zumindest teilweise schon oft gelöst wurde.
Bevor jemand das Rad neu erfindet, hat irgendjemand irgendwelche reguläre Ausdrücke, die für sie oder nützlichen Code gearbeitet haben? Leistung ist keine Überlegung, da dies ein einmaliges Dienstprogramm ist.
Typische zu behandelnde Werte:
Jason Briggs, J. D. Smith, John Y Bürger, J Scott Myers, Bill Jackobson III, Herr John Mills
Aktualisierung: Während ein allgemeines Problem besteht, scheint die typische Lösung darin zu bestehen, die meisten Fälle zu behandeln und den Rest manuell zu reinigen.
(Angesichts der Häufigkeit, mit der dieses Problem erlebt werden muss, habe ich ursprünglich erwartet, dass ich dort eine Hilfsprogrammbibliothek finden würde, die ich aber selbst mit Google nicht finden konnte)
Meine Empfehlung wäre die folgende:
Teilen Sie die Namen in den Räumen auf.
Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.
Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.
Vergleiche den ersten Wert für die Länge. Wenn es nur 1 Zeichen ist, kombinieren Sie zuerst 2 Elemente im Array.
Es ist immer noch nicht narrensicher; es sollte jedoch mindestens 80 Prozent Ihrer Fälle ansprechen.
Hoffe, das hilft.
Es ist wahrscheinlich unmöglich (zuverlässig).
Auch wenn Sie das für einige Namen tun können, bekommen Sie irgendwann eine spanische Person, die beide Familiennamen aufschreibt. Oder einige Leute (vergessen, welche Nationalität es ist), die "Nachname Vorname" eingeben. Oder eine von vielen anderen Situationen ...
Das Beste, was Sie wahrscheinlich tun können, ist zwei Wörter als Vor- und Nachname zu teilen, dann gehen Sie den Rest manuell durch (Sie selbst, oder stellen Sie einige Profis ein) ...
Ich mache eine Website-Migration, bei der Vorname und Nachname aus dem vollständigen Namen extrahiert werden. Wenn diese vom Endbenutzer erstellt wurden, existieren alle Arten von Permutationen (obwohl Englisch und allgemein nicht zu fremdartig). Meistens kann ich das erste Wort als Vornamen und das letzte Wort als den Nachnamen nehmen, aber einige Ausnahmen von dem gelegentlichen Präfix und Suffix. Als ich die Daten durchging und versuchte, alle wahrscheinlichen Ausnahmen zu verstehen, wurde mir klar, dass dies ein häufiges Problem ist, das zumindest teilweise schon oft gelöst wurde.
Bevor jemand das Rad neu erfindet, hat irgendjemand irgendwelche reguläre Ausdrücke, die für sie oder nützlichen Code gearbeitet haben? Leistung ist keine Überlegung, da dies ein einmaliges Dienstprogramm ist.
Typische zu behandelnde Werte:
Jason Briggs, J. D. Smith, John Y Bürger, J Scott Myers, Bill Jackobson III, Herr John Mills
Aktualisierung: Während ein allgemeines Problem besteht, scheint die typische Lösung darin zu bestehen, die meisten Fälle zu behandeln und den Rest manuell zu reinigen.
(Angesichts der Häufigkeit, mit der dieses Problem erlebt werden muss, habe ich ursprünglich erwartet, dass ich dort eine Hilfsprogrammbibliothek finden würde, die ich aber selbst mit Google nicht finden konnte)
Es ist wahrscheinlich unmöglich (zuverlässig).
Auch wenn Sie das für einige Namen tun können, bekommen Sie irgendwann eine spanische Person, die beide Familiennamen aufschreibt. Oder einige Leute (vergessen, welche Nationalität es ist), die "Nachname Vorname" eingeben. Oder eine von vielen anderen Situationen ...
Das Beste, was Sie wahrscheinlich tun können, ist zwei Wörter als Vor- und Nachname zu teilen, dann gehen Sie den Rest manuell durch (Sie selbst, oder stellen Sie einige Profis ein) ...
Wenn es sich um einen One-Shot-Deal handelt, dann würde ich in Betracht ziehen, jemand anderen, der ein Spezialist ist, dafür zu bezahlen.
Sie werden Erfahrung in der Arbeit mit schlecht strukturierten Datensätzen haben.
Ich habe keine Verbindung mit ihnen, aber Melissa Data bietet einen Service, der auf diese Art von Dingen zugeschnitten scheint.
Meine Empfehlung wäre die folgende:
Teilen Sie die Namen in den Räumen auf.
Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.
Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.
Vergleiche den ersten Wert für die Länge. Wenn es nur 1 Zeichen ist, kombinieren Sie zuerst 2 Elemente im Array.
Es ist immer noch nicht narrensicher; es sollte jedoch mindestens 80 Prozent Ihrer Fälle ansprechen.
Hoffe, das hilft.
Dies ist ein unbestimmtes Problem (oder ein Oracle-Problem, wie ich es gerne nenne) und ist auf zuverlässige Weise unlösbar. Das liegt an der Existenz von Namen, die sowohl Vornamen als auch Nachnamen sind, z. B. Stanley, Jackson usw. Aber es kann ein Versuch gegeben werden. Sie müssen ein Lernprogramm schreiben, das eine Reihe von Vornamen und Nachnamen erhält, und es wird ein Wörterbuch dieser Namen verwaltet, das mit der Wahrscheinlichkeit verglichen wird, dass es ein Vorname ist.
Übergeben Sie nun alle Ihre zu migrierenden Werte und verwenden Sie diese Wahrscheinlichkeiten, um eine vernünftige Trennung zwischen Vor- und Nachnamen zu erhalten. Darüber hinaus, wenn ein bestimmter Name mehrdeutig wird (total auf Sie, um mehrdeutig zu definieren, aber ich würde es als die unteren 30 Perzentil aller Wahrscheinlichkeitswerte, die ich erhalten habe) definieren, dann können Sie es später zur Überprüfung markieren.
Hoffe, das hilft.
Prost!
Ich habe einen sehr einfachen (80% wahrscheinlich) Regex, den ich in Perl hatte, ausgegraben und einige glückliche C # -Gruppennamen hinzugefügt:
%code%
Ich poste als Wiki, also kann jeder etwas hinzufügen, von dem er denkt, dass es helfen würde!
Wenn Sie nur ein paar Benutzer (& lt; 100k) haben, dann sehen Sie, ob Sie jemanden dazu bringen können, es manuell zu tun, und nutzen Sie Ihre Zeit für etwas, das sich lohnt. Da es sich um einen einmaligen Job handelt, ist der ROI suck: -)
Wenn Ihr Datenuniversum & lt; 10k-Namen lautet und ein einmaliger Deal eines der aufgeteilten Szenarien, die von anderen Postern beschrieben werden, in eine Zwischendatei implementiert, dann gehen Sie manuell durch und schauen und aktualisieren Sie wo nötig (Sie wären überrascht wie wenig Zeit, um 10k Namen zu überprüfen. Es wird weniger Zeit benötigen, als den perfekt implementierten Algorithmus zu finden und zu erstellen. Sobald Ihr Universum von Namen & gt; 100k dann ist es wert, zu versuchen, Ihren Weg aus ihm heraus zu drehen und eine Datei für die manuelle Überprüfung und Änderung aller Namen, die Ihnen keinen perfekten Vornamen, Nachname split spinnen.
%Vor%
Am schnellsten ist ein hybrider Algorithmus - ein menschlicher Ansatz. Sie möchten nicht die Zeit damit verbringen, ein System zusammenzustellen, das zu 99.99% funktioniert, weil die letzten 5-10% der Optimierung Sie umbringen werden. Außerdem möchten Sie nicht nur die gesamte Arbeit an eine Person ablegen, da die meisten Fälle (ich denke) ziemlich einfach sind.
Bauen Sie also schnell etwas auf, was JamesEggers vorgeschlagen hat, aber fangen Sie alle Fälle auf, die ungewöhnlich erscheinen oder nicht zu Ihren vordefinierten Conversions passen. Dann gehen Sie einfach diese Fälle manuell durch (Es sollte nicht zu viele sein).
Sie können diese Fälle selbst durchgehen oder sie an andere Benutzer auslagern, indem Sie HITs in Mechanical Turk einrichten:
(Unter der Annahme von 500 Fällen zu 0,05 $ (hohe Belohnung) sollten Ihre Gesamtkosten höchstens 25 $ betragen)
Wie andere darauf hingewiesen haben, gibt es keine Lösung, die in allen Fällen funktioniert. Ein Grund dafür ist, dass es Namen gibt, die sowohl als Vor- als auch als Nachname verwendet werden können.
Sie können eine Datenbank mit Vornamen verwenden und herausfinden, welche Teile des Namens mögliche Vornamen sind. Wenn Sie auch das Land der Person mit einem bestimmten Namen kennen, können Sie die Genauigkeit sehr erhöhen.
Für eine kostenlose Datenbank mit Vornamen siehe diese Antwort .
Wenn es sich um einen One-Shot-Deal handelt, dann würde ich in Betracht ziehen, jemand anderen, der ein Spezialist ist, dafür zu bezahlen.
Sie werden Erfahrung in der Arbeit mit schlecht strukturierten Datensätzen haben.
Ich habe keine Verbindung mit ihnen, aber Melissa Data bietet einen Service, der auf diese Art von Dingen zugeschnitten scheint.
Dies ist ein unbestimmtes Problem (oder ein Oracle-Problem, wie ich es gerne nenne) und ist auf zuverlässige Weise unlösbar. Das liegt an der Existenz von Namen, die sowohl Vornamen als auch Nachnamen sind, z. B. Stanley, Jackson usw. Aber es kann ein Versuch gegeben werden. Sie müssen ein Lernprogramm schreiben, das eine Reihe von Vornamen und Nachnamen erhält, und es wird ein Wörterbuch dieser Namen verwaltet, das mit der Wahrscheinlichkeit verglichen wird, dass es ein Vorname ist.
Übergeben Sie nun alle Ihre zu migrierenden Werte und verwenden Sie diese Wahrscheinlichkeiten, um eine vernünftige Trennung zwischen Vor- und Nachnamen zu erhalten. Darüber hinaus, wenn ein bestimmter Name mehrdeutig wird (total auf Sie, um mehrdeutig zu definieren, aber ich würde es als die unteren 30 Perzentil aller Wahrscheinlichkeitswerte, die ich erhalten habe) definieren, dann können Sie es später zur Überprüfung markieren.
Hoffe, das hilft.
Prost!
Ich mache eine Website-Migration, bei der Vorname und Nachname aus dem vollständigen Namen extrahiert werden. Wenn diese vom Endbenutzer erstellt wurden, existieren alle Arten von Permutationen (obwohl Englisch und allgemein nicht zu fremdartig). Meistens kann ich das erste Wort als Vornamen und das letzte Wort als den Nachnamen nehmen, aber einige Ausnahmen von dem gelegentlichen Präfix und Suffix. Als ich die Daten durchging und versuchte, alle wahrscheinlichen Ausnahmen zu verstehen, wurde mir klar, dass dies ein häufiges Problem ist, das zumindest teilweise schon oft gelöst wurde.
Bevor jemand das Rad neu erfindet, hat irgendjemand irgendwelche reguläre Ausdrücke, die für sie oder nützlichen Code gearbeitet haben? Leistung ist keine Überlegung, da dies ein einmaliges Dienstprogramm ist.
Typische zu behandelnde Werte:
Jason Briggs, J. D. Smith, John Y Bürger, J Scott Myers, Bill Jackobson III, Herr John Mills
Aktualisierung: Während ein allgemeines Problem besteht, scheint die typische Lösung darin zu bestehen, die meisten Fälle zu behandeln und den Rest manuell zu reinigen.
(Angesichts der Häufigkeit, mit der dieses Problem erlebt werden muss, habe ich ursprünglich erwartet, dass ich dort eine Hilfsprogrammbibliothek finden würde, die ich aber selbst mit Google nicht finden konnte)
Es ist wahrscheinlich unmöglich (zuverlässig).
Auch wenn Sie das für einige Namen tun können, bekommen Sie irgendwann eine spanische Person, die beide Familiennamen aufschreibt. Oder einige Leute (vergessen, welche Nationalität es ist), die "Nachname Vorname" eingeben. Oder eine von vielen anderen Situationen ...
Das Beste, was Sie wahrscheinlich tun können, ist zwei Wörter als Vor- und Nachname zu teilen, dann gehen Sie den Rest manuell durch (Sie selbst, oder stellen Sie einige Profis ein) ...
Wenn es sich um einen One-Shot-Deal handelt, dann würde ich in Betracht ziehen, jemand anderen, der ein Spezialist ist, dafür zu bezahlen.
Sie werden Erfahrung in der Arbeit mit schlecht strukturierten Datensätzen haben.
Ich habe keine Verbindung mit ihnen, aber Melissa Data bietet einen Service, der auf diese Art von Dingen zugeschnitten scheint.
Meine Empfehlung wäre die folgende:
Teilen Sie die Namen in den Räumen auf.
Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.
Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.
Vergleiche den ersten Wert für die Länge. Wenn es nur 1 Zeichen ist, kombinieren Sie zuerst 2 Elemente im Array.
Es ist immer noch nicht narrensicher; es sollte jedoch mindestens 80 Prozent Ihrer Fälle ansprechen.
Hoffe, das hilft.
Dies ist ein unbestimmtes Problem (oder ein Oracle-Problem, wie ich es gerne nenne) und ist auf zuverlässige Weise unlösbar. Das liegt an der Existenz von Namen, die sowohl Vornamen als auch Nachnamen sind, z. B. Stanley, Jackson usw. Aber es kann ein Versuch gegeben werden. Sie müssen ein Lernprogramm schreiben, das eine Reihe von Vornamen und Nachnamen erhält, und es wird ein Wörterbuch dieser Namen verwaltet, das mit der Wahrscheinlichkeit verglichen wird, dass es ein Vorname ist.
Übergeben Sie nun alle Ihre zu migrierenden Werte und verwenden Sie diese Wahrscheinlichkeiten, um eine vernünftige Trennung zwischen Vor- und Nachnamen zu erhalten. Darüber hinaus, wenn ein bestimmter Name mehrdeutig wird (total auf Sie, um mehrdeutig zu definieren, aber ich würde es als die unteren 30 Perzentil aller Wahrscheinlichkeitswerte, die ich erhalten habe) definieren, dann können Sie es später zur Überprüfung markieren.
Hoffe, das hilft.
Prost!
Ich habe einen sehr einfachen (80% wahrscheinlich) Regex, den ich in Perl hatte, ausgegraben und einige glückliche C # -Gruppennamen hinzugefügt:
(?<title>(mr|ms|mrs|miss|dr|hon)\.?\s+)?(?<firstandmiddle>.+)\s+(?<last>((van|de|von)\s+)?\S+)(?<junior>\s+(jr|sr|ii|iii|iv)\.?)
Ich poste als Wiki, also kann jeder etwas hinzufügen, von dem er denkt, dass es helfen würde!
Wenn Sie nur ein paar Benutzer (& lt; 100k) haben, dann sehen Sie, ob Sie jemanden dazu bringen können, es manuell zu tun, und nutzen Sie Ihre Zeit für etwas, das sich lohnt. Da es sich um einen einmaligen Job handelt, ist der ROI suck: -)
Wenn Ihr Datenuniversum & lt; 10k-Namen lautet und ein einmaliger Deal eines der aufgeteilten Szenarien, die von anderen Postern beschrieben werden, in eine Zwischendatei implementiert, dann gehen Sie manuell durch und schauen und aktualisieren Sie wo nötig (Sie wären überrascht wie wenig Zeit, um 10k Namen zu überprüfen. Es wird weniger Zeit benötigen, als den perfekt implementierten Algorithmus zu finden und zu erstellen. Sobald Ihr Universum von Namen & gt; 100k dann ist es wert, zu versuchen, Ihren Weg aus ihm heraus zu drehen und eine Datei für die manuelle Überprüfung und Änderung aller Namen, die Ihnen keinen perfekten Vornamen, Nachname split spinnen.
%Vor%
Am schnellsten ist ein hybrider Algorithmus - ein menschlicher Ansatz. Sie möchten nicht die Zeit damit verbringen, ein System zusammenzustellen, das zu 99.99% funktioniert, weil die letzten 5-10% der Optimierung Sie umbringen werden. Außerdem möchten Sie nicht nur die gesamte Arbeit an eine Person ablegen, da die meisten Fälle (ich denke) ziemlich einfach sind.
Bauen Sie also schnell etwas auf, was JamesEggers vorgeschlagen hat, aber fangen Sie alle Fälle auf, die ungewöhnlich erscheinen oder nicht zu Ihren vordefinierten Conversions passen. Dann gehen Sie einfach diese Fälle manuell durch (Es sollte nicht zu viele sein).
Sie können diese Fälle selbst durchgehen oder sie an andere Benutzer auslagern, indem Sie HITs in Mechanical Turk einrichten:
(Unter der Annahme von 500 Fällen zu 0,05 $ (hohe Belohnung) sollten Ihre Gesamtkosten höchstens 25 $ betragen)
Wie andere darauf hingewiesen haben, gibt es keine Lösung, die in allen Fällen funktioniert. Ein Grund dafür ist, dass es Namen gibt, die sowohl als Vor- als auch als Nachname verwendet werden können.
Sie können eine Datenbank mit Vornamen verwenden und herausfinden, welche Teile des Namens mögliche Vornamen sind. Wenn Sie auch das Land der Person mit einem bestimmten Namen kennen, können Sie die Genauigkeit sehr erhöhen.
Für eine kostenlose Datenbank mit Vornamen siehe diese Antwort .
Wie andere darauf hingewiesen haben, gibt es keine Lösung, die in allen Fällen funktioniert. Ein Grund dafür ist, dass es Namen gibt, die sowohl als Vor- als auch als Nachname verwendet werden können.
Sie können eine Datenbank mit Vornamen verwenden und herausfinden, welche Teile des Namens mögliche Vornamen sind. Wenn Sie auch das Land der Person mit einem bestimmten Namen kennen, können Sie die Genauigkeit sehr erhöhen.
Für eine kostenlose Datenbank mit Vornamen siehe diese Antwort .
Wenn Ihr Datenuniversum & lt; 10k-Namen lautet und ein einmaliger Deal eines der aufgeteilten Szenarien, die von anderen Postern beschrieben werden, in eine Zwischendatei implementiert, dann gehen Sie manuell durch und schauen und aktualisieren Sie wo nötig (Sie wären überrascht wie wenig Zeit, um 10k Namen zu überprüfen. Es wird weniger Zeit benötigen, als den perfekt implementierten Algorithmus zu finden und zu erstellen. Sobald Ihr Universum von Namen & gt; 100k dann ist es wert, zu versuchen, Ihren Weg aus ihm heraus zu drehen und eine Datei für die manuelle Überprüfung und Änderung aller Namen, die Ihnen keinen perfekten Vornamen, Nachname split spinnen.