Trennen Sie Vorname und Nachname von der vollständigen Zeichenfolge in C #

7

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)

    
Stuart 02.08.2009, 15:10
quelle

10 Antworten

11

Meine Empfehlung wäre die folgende:

  1. Teilen Sie die Namen in den Räumen auf.

  2. Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.

  3. Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.

  4. 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.

    
JamesEggers 02.08.2009, 15:56
quelle
6

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) ...

    
viraptor 02.08.2009 15:45
quelle
6
___ qstntxt ___

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)

    
___ qstnhdr ___ Trennen Sie Vorname und Nachname von der vollständigen Zeichenfolge in C # ___ answer1219110 ___

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) ...

    
___ answer1219107 ___

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.

    
___ answer1219130 ___

Meine Empfehlung wäre die folgende:

  1. Teilen Sie die Namen in den Räumen auf.

  2. Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.

  3. Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.

  4. 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.

    
___ answer1219116 ___

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!

    
___ antwort1219200 ___

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!

    
___ answer1219146 ___

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: -)

    
___ answer1219304 ___

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.

    
___ answer8287190 ___

%Vor%     
___ antwort1219190 ___

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)

    
___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ tag123regex ___ Reguläre Ausdrücke stellen eine deklarative Sprache zur Verfügung, um Muster in Strings zu vergleichen. Sie werden häufig für die Überprüfung, Analyse und Umwandlung von Zeichenfolgen verwendet. Da reguläre Ausdrücke nicht vollständig standardisiert sind, sollten alle Fragen mit diesem Tag auch ein Tag enthalten, das die anwendbare Programmiersprache oder das entsprechende Werkzeug angibt. HINWEIS: Nach HTML-, JSON-, usw.-Regexen zu fragen, neigt zu negativen Reaktionen. Wenn es einen Parser dafür gibt, verwende stattdessen diesen. ___ answer1219260 ___

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 .

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___
Robert Venables 02.08.2009 16:16
quelle
2

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.

    
ShuggyCoUk 02.08.2009 15:44
quelle
2

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!

    
Edward I 02.08.2009 15:49
quelle
1

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: -)

    
Kasper 02.08.2009 16:02
quelle
1
___ qstntxt ___

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)

    
___ qstnhdr ___ Trennen Sie Vorname und Nachname von der vollständigen Zeichenfolge in C # ___ answer1219110 ___

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) ...

    
___ answer1219107 ___

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.

    
___ answer1219130 ___

Meine Empfehlung wäre die folgende:

  1. Teilen Sie die Namen in den Räumen auf.

  2. Überprüfen Sie die Länge des zurückgegebenen Arrays. Wenn 2, einfach teilen. Wenn mehr, weiter.

  3. Vergleiche den ersten Wert für Präfixe (d. h. Herr Frau Frau Dr.) ... falls ja, entferne ihn sonst gehe zum nächsten.

  4. 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.

    
___ answer1219116 ___

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!

    
___ antwort1219200 ___

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!

    
___ answer1219146 ___

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: -)

    
___ answer1219304 ___

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.

    
___ answer8287190 ___

%Vor%     
___ antwort1219190 ___

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)

    
___ tag123string ___ Eine Zeichenfolge ist eine endliche Abfolge von Symbolen, die üblicherweise für Text verwendet wird, manchmal jedoch auch für beliebige Daten. ___ tag123regex ___ Reguläre Ausdrücke stellen eine deklarative Sprache zur Verfügung, um Muster in Strings zu vergleichen. Sie werden häufig für die Überprüfung, Analyse und Umwandlung von Zeichenfolgen verwendet. Da reguläre Ausdrücke nicht vollständig standardisiert sind, sollten alle Fragen mit diesem Tag auch ein Tag enthalten, das die anwendbare Programmiersprache oder das entsprechende Werkzeug angibt. HINWEIS: Nach HTML-, JSON-, usw.-Regexen zu fragen, neigt zu negativen Reaktionen. Wenn es einen Parser dafür gibt, verwende stattdessen diesen. ___ answer1219260 ___

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 .

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___
Mike 02.08.2009 16:23
quelle
1

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 .

    
Ludwig Weinzierl 02.08.2009 16:55
quelle
1

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.

    
kloucks 02.08.2009 17:13
quelle
1

%Vor%     
lipasion 27.11.2011 16:49
quelle

Tags und Links