<p>我不相信你完全可以用程序来完成,所以需要一些手动操作。但是,您可以使用<code>itertools.groupby</code>使事情变得简单一些</p>
<p>正如一些评论中所指出的,公司可能包含某些关键字,因此我们可以创建这些关键字的列表以供使用:</p>
<pre><code>key_words = ["INC", "LLC", "CO", "GROUP"]
</code></pre>
<p>从这里,我们可以根据一个项目是否包含其中一个关键字对列表进行排序(这是分组所必需的):</p>
^{pr2}$
<p>在您的示例中,将列出</p>
<pre><code>['PRULLAGE PHD JOSEPH B', 'JOSEPH D WAGENKNECHT', 'ROBERTSON KEITH', 'AGCHOICE - BLUE MOUND', 'INOVATIA LABORATORIES LLC', 'S J SMITH CO INC', 'TEVA PHARMACEUTICALS USA INC', 'KENT NUTRITION GROUP INC', 'LINCARE INC']
</code></pre>
<p>从这里,我们可以将<em>可能</em>而不是公司(那些不包含任何关键字的)和肯定是公司的(那些确实包含关键字的)进行分组:</p>
<pre><code>import itertools
I = itertools.groupby(y, lambda name: any(key_word in name for key_word in key_words))
</code></pre>
<p>所以我们现在有两组人:</p>
<pre><code>for i in I:
print i[0], list(i[1])
False ['PRULLAGE PHD JOSEPH B', 'JOSEPH D WAGENKNECHT', 'ROBERTSON KEITH', 'AGCHOICE - BLUE MOUND']
True ['INOVATIA LABORATORIES LLC', 'S J SMITH CO INC', 'TEVA PHARMACEUTICALS USA INC', 'KENT NUTRITION GROUP INC', 'LINCARE INC']
</code></pre>
<p>然后,可以手动对假组进行排序并删除公司,或者应用其他类似的筛选方法来进一步改进匹配。要应用的其他筛选器:</p>
<ul>
<li>任何包含<code>"MR", "MS", "MRS", "PHD", "DR"</code>的东西都很可能是一个人</li>
<li>形式为<code>"multiple_letters<space>single_letter<space>multiple_letters"</code>的单词可能是名称,可以使用<code>re</code>进行匹配</li>
</ul>