Разделите firstname и lastname от строки fullname в C#

Противоположность синтаксический анализ , сериализируют

7
задан Stuart 2 August 2009 в 16:30
поделиться

9 ответов

My recommendation would be the following:

  1. Split the names on the spaces.

  2. Check the length of the returned array. If 2, easy split. If more, next.

  3. Compare the 1st value for prefixes (i.e. Mr. Mrs. Ms. Dr.)...if so, remove it else move to next.

  4. Compare the 1st value for length. If it's just 1 character, combine first 2 items in the array.

It's still not fool proof; however, it should address at least 80 per cent of your cases.

Hope this helps.

11
ответ дан 6 December 2019 в 05:49
поделиться

It's probably impossible to do (reliably).

Even if you can do that for some names, you will get a Spanish person at some point, who will write down both family names. Or some people (forgot which nationality it is) that will put in "lastname firstname". Or one of many other situations...

The best you can probably do is split 2 words as first and last name, then go through the rest manually (yourself, or hire some professionals)...

6
ответ дан 6 December 2019 в 05:49
поделиться

If this is a one shot deal then I would strongly consider paying someone else who is a specialist to do it for you.

They will be experienced in working with poorly structured data sets.

I have no affiliation with them but Melissa Data provide a service that seems tailored to this sort of thing.

2
ответ дан 6 December 2019 в 05:49
поделиться

This is an indeterminate problem (or an Oracle problem as I like to call it) and is unsolvable in a reliable way. That is because of existance of names that are both first names and last names e.g., Stanley, Jackson etc. But a try can be given. You need to write a learning program that will be given a set of first names and last names and it will maintain a dictionary of these names, mapped against the probability that it is a first name.

Now, pass all your values to be migrated and using these probabilities you can get a reasonable split between first and last names. Furthermore, if a particular name becomes ambiguous (totally upon you to define ambiguous, but I would define it as the bottom 30 percentile of all probability values I have obtained) then you can flag it for review later.

Hope this helps.

Cheers!

2
ответ дан 6 December 2019 в 05:49
поделиться

Я откопал очень простое (вероятно, 80%) регулярное выражение, которое у меня было в perl, и добавил несколько удачных имен групп C #:

(? (mr | ms | mrs | miss | dr | hon) \.? \ s +)? (? <firstandmiddle>. +) \ s + (? <last> ((van | de | von) \ s +)? \ S +) (? <junior> \ s + ( jr | sr | ii | iii | iv) \.?) </code></p> <p> Я публикую как вики, так что любой может свободно добавлять вещи, которые, по их мнению, могут помочь! </p> </div> <div class="votes-answer green"> <div class="vote-count" itemprop="upvoteCount">1</div><i class="fa fa-thumbs-o-up"></i> </div> <div class="clearfix"></div> <div class="action-time"> ответ дан <span title="6 December 2019 в 05:49 ">6 December 2019 в 05:49 </span> </div> <a class="s-link" href="/questions/197833/razdelite-firstname-i-lastname-ot-stroki-fullname-v-c#584" title="поделиться">поделиться</a> </div> <div class="post-layout--right"> <div id="comments-536194"> <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true"> </ul> </div> </div> </div> </div> <div class="answer" id="536195" itemscope="" itemtype="http://schema.org/Answer"> <div class="answer-row"> <div class="answer-text"> <div class="description" itemprop="text"> <p> Самый быстрый способ сделать это - гибридный алгоритм и человек. Вы не хотите тратить время на создание системы, которая работает 99,99% времени, потому что последние 5-10% оптимизации вас убьют. Кроме того, вы не хотите просто свалить всю работу на человека, потому что большинство случаев (я предполагаю) довольно просты. </p> <p> Итак, быстро создайте что-то вроде того, что предложил Джеймс Эггерс, но уловите все случаи, которые кажутся необычными или не соответствуют вашим предопределенным преобразованиям. Затем просто рассмотрите эти случаи вручную (их не должно быть слишком много). </p> <p> Вы можете пройти эти случаи самостоятельно или передать их другим пользователям, настроив HIT в Mechanical Turk: </p> <p><a href="http://aws.amazon.com/mturk/" rel="noreferrer"> http: // aws.amazon.com/mturk/</a></p> <p> (Предполагая, что 500 случаев по цене 0,05 доллара США (высокая награда), ваши общие затраты должны составить не более 25 долларов США) </p> </div> <div class="votes-answer green"> <div class="vote-count" itemprop="upvoteCount">6</div><i class="fa fa-thumbs-o-up"></i> </div> <div class="clearfix"></div> <div class="action-time"> ответ дан <span title="6 December 2019 в 05:49 ">6 December 2019 в 05:49 </span> </div> <a class="s-link" href="/questions/197833/razdelite-firstname-i-lastname-ot-stroki-fullname-v-c#584" title="поделиться">поделиться</a> </div> <div class="post-layout--right"> <div id="comments-536195"> <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true"> </ul> </div> </div> </div> </div> <div class="answer" id="536196" itemscope="" itemtype="http://schema.org/Answer"> <div class="answer-row"> <div class="answer-text"> <div class="description" itemprop="text"> <p>, если ваш юниверс данных содержит <10 тыс. Имен и его единовременная сделка реализует один из сценариев разделения, описанных другими плакатами, в промежуточный файл, затем выполните вручную, просмотрите и при необходимости обновите ( вы будете удивлены, как мало времени уходит на проверку 10к имен). Это займет меньше времени, чем попытки найти и / или построить идеально реализованный алгоритм. Как только ваша вселенная имен> 100k, стоит попробовать запрограммировать выход из нее и создать файл для ручного просмотра и изменения всех имен, которые не дают вам идеального имени и разделения фамилии. </p> </div> <div class="votes-answer green"> <div class="vote-count" itemprop="upvoteCount">1</div><i class="fa fa-thumbs-o-up"></i> </div> <div class="clearfix"></div> <div class="action-time"> ответ дан <span title="6 December 2019 в 05:49 ">6 December 2019 в 05:49 </span> </div> <a class="s-link" href="/questions/197833/razdelite-firstname-i-lastname-ot-stroki-fullname-v-c#584" title="поделиться">поделиться</a> </div> <div class="post-layout--right"> <div id="comments-536196"> <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true"> </ul> </div> </div> </div> </div> <div class="answer" id="536198" itemscope="" itemtype="http://schema.org/Answer"> <div class="answer-row"> <div class="answer-text"> <div class="description" itemprop="text"> <p> Как указывали другие, не существует решения, которое работает во всех случаях. Одна из причин этого в том, что есть имена, которые можно использовать как имя, так и фамилию. </p> <p> Вы можете использовать <strong> базу данных имен </strong> и выяснить, какие части имени возможны имена. Если вы также знаете страну человека с определенным именем, вы можете значительно повысить точность. </p> <p> Для бесплатной базы данных имен см. <a href="https://stackoverflow.com/questions/818203/does-anyone-know-of-a-good-library-for-mapping-a-persons-name-to-his-or-her-sex/818283#818283"> этот ответ </a>. </p> </div> <div class="votes-answer green"> <div class="vote-count" itemprop="upvoteCount">1</div><i class="fa fa-thumbs-o-up"></i> </div> <div class="clearfix"></div> <div class="action-time"> ответ дан <span title="6 December 2019 в 05:49 ">6 December 2019 в 05:49 </span> </div> <a class="s-link" href="/questions/197833/razdelite-firstname-i-lastname-ot-stroki-fullname-v-c#584" title="поделиться">поделиться</a> </div> <div class="post-layout--right"> <div id="comments-536198"> <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true"> </ul> </div> </div> </div> </div> <div class="answer" id="536223" itemscope="" itemtype="http://schema.org/Answer"> <div class="answer-row"> <div class="answer-text"> <div class="description" itemprop="text"> <p> Если у вас всего несколько пользователей (<100k), посмотрите, сможете ли вы заставить кого-нибудь сделать это вручную и потратить свое время на что-нибудь стоящее. Поскольку это разовая работа, рентабельность инвестиций - отстой: -) </p> </div> <div class="votes-answer green"> <div class="vote-count" itemprop="upvoteCount">1</div><i class="fa fa-thumbs-o-up"></i> </div> <div class="clearfix"></div> <div class="action-time"> ответ дан <span title="6 December 2019 в 05:49 ">6 December 2019 в 05:49 </span> </div> <a class="s-link" href="/questions/197833/razdelite-firstname-i-lastname-ot-stroki-fullname-v-c#584" title="поделиться">поделиться</a> </div> <div class="post-layout--right"> <div id="comments-536223"> <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true"> </ul> </div> </div> </div> </div> <div style="margin-top: 20px;"> Другие вопросы по тегам: <div class="tags" style="display: inline-block; float: none;"> <a href="/questions/tagged/c#" class="tag" title="c#" rel="tag">c#</a> <a href="/questions/tagged/regex" class="tag" title="regex" rel="tag">regex</a> <a href="/questions/tagged/string" class="tag" title="string" rel="tag">string</a> </div> <h3 class="m-t-20">Похожие вопросы:</h3> <div class="related-block"> <ul> <li><div class='votes-answer green'><span class='vote-count'>295</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/89499/skrytye-vozmozhnosti-c-zakryto" title="Скрытые возможности C #? [закрыто]">Скрытые возможности C #? [закрыто]</a> - 25 September 2017 20:53 </li> <li><div class='votes-answer green'><span class='vote-count'>115</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/83765/kakie-vashi-ljubimye-metody-rasshirenija-dlja-c-codeplex-com-extensionoverflow" title="Какие ваши любимые методы расширения для C #? (Codeplex.com/extensionoverflow)">Какие ваши любимые методы расширения для C #? (Codeplex.com/extensionoverflow)</a> - 23 May 2017 12:18 </li> <li><div class='votes-answer green'><span class='vote-count'>81</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/96626/ispolzovanie-kljuchevogo-slova-var-v-c" title="Использование ключевого слова var в C #">Использование ключевого слова var в C #</a> - 3 February 2015 03:25 </li> <li><div class='votes-answer green'><span class='vote-count'>55</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/130658/kak-proverit-javljaetsja-li-dannaja-stroka-palindromom-zakrytyj" title="Как проверить, является ли данная строка палиндромом? [закрытый]">Как проверить, является ли данная строка палиндромом? [закрытый]</a> - 18 October 2011 09:05 </li> <li><div class='votes-answer green'><span class='vote-count'>51</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/138697/pochemu-eto-schitajut-plohoj-praktikoj-dlja-iskljuchenija-figurnyh-skobok-zakrytyj" title="Почему это считают плохой практикой для исключения фигурных скобок? [закрытый]">Почему это считают плохой практикой для исключения фигурных скобок? [закрытый]</a> - 19 August 2016 17:07 </li> <li><div class='votes-answer green'><span class='vote-count'>48</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/96780/chto-takoe-hudshaja-oshibka-v-c-ili-net-zakryto" title="Что такое худшая ошибка в C # или .NET? [закрыто]">Что такое худшая ошибка в C # или .NET? [закрыто]</a> - 13 August 2015 04:30 </li> <li><div class='votes-answer green'><span class='vote-count'>41</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/125521/chto-za-i-protiv-javljajutsja-k-uderzhaniju-sql-sohranennym-procs-po-sravneniju-s-zakrytym-kodom" title="Что за и против являются к удержанию SQL Сохраненным Procs по сравнению с [закрытым] Кодом">Что за и против являются к удержанию SQL Сохраненным Procs по сравнению с [закрытым] Кодом</a> - 27 October 2008 14:46 </li> </ul> </div> </div> </div> </div> </div> <aside class="sidebar"> <div class="awrap"> <script async src="https://yastatic.net/pcode-native/loaders/loader.js"></script> <script> (yaads = window.yaads || []).push({ id: "553274-2", render: "#id-553274-2" }); </script> <div id="id-553274-2"></div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:600px" data-ad-client="ca-pub-2355906945027976" data-ad-slot="8038370725"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </aside> </div> </div> <footer class="footer"> <div class="wrapper wrapper--sm"> <div class="footer-navs-col"> <div class="footer-nav footer-nav--menu"> <div class="footer-coryright">© 2017 - 2020 Вопросы и ответы по программированию</div> </div> <div class="footer-nav footer-nav--catalog"> </div> </div> <div class="footer-contacts-col"> <div class="soc-widget-col"> </div> </div> <div class="clearfix"></div> </div> </footer> </div> <script type="text/javascript" src="/js/ui/jquery-ui-1.8.16.custom.min.js"></script> <script type="text/javascript" src="/js/ui/external/jquery.cookie.js"></script> <script type="text/javascript" src="/js/versions/menu.ru.u1607887878.js"></script> <script type="text/javascript" src="/js/jquery.fancybox.min.js"></script> <script type="text/javascript" src="/js/slick.min.js"></script> <script type="text/javascript" src="/js/jquery.maskedinput.min.js"></script> <script type="text/javascript" src="/js/versions/scripts.ru.u1607887878.js"></script> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; var z = null;m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(90030325, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/90030325" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-123993370-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-123993370-1'); </script> </div> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "name": "Программирование - вопросы и ответы", "alternateName": "Программирование - вопросы и ответы", "url": "https://legkovopros.ru", "potentialAction": { "@type": "SearchAction", "target": "https://legkovopros.ru/search?search={search_term_string}", "query-input": "required name=search_term_string" } } { "@context": "https://schema.org", "@type": "Organization", "name": "Программирование - вопросы и ответы", "url": "https://legkovopros.ru", "logo": "https://legkovopros.ru/i/logo.png", "email": "info@legkovopros.ru", "telephone": "" } </script> </body> </html>