<p>据我所知,您必须存储每个作者的任意名称列表,并有效地匹配它们。在</p>
<p>我假设您已经解决了解析名称的问题,删除了诸如“Dr”之类的非必要/可选部分,并保留了诸如“von”和“de”之类的粒子。规范化名称必须是固定大小写的字符串序列(小写可以,但我还是坚持大写或标题大小写)。在</p>
<p>现在,<code>List<String></code>或{<cd2>}将作为包含其他详细信息的<code>HashMap</code>的键。这恐怕行不通,因为这两种方法都是可变的,我不确定它们的<code>hashCode()</code>方法是否适合这种情况。在</p>
<p>所以我会想出这样的办法:</p>
<pre><code>class AuthorName(object) {
private String[] parts;
public AuthorName(String... name_parts) {
assert name_parts.length > 0;
parts = name_parts;
}
@Override
public int hashCode() {
// hashCode() that only depends on name parts
int result = 0;
for (int i=0; i < parts.length; i+=1) result ^= part.hashCode();
return result;
}
}
Map<AuthorName, ...> authors = new HashMap<AuthorName, ...>();
authors.put(new AuthorName('John', 'Doe'), ...);
assert authors.get(new AuthorName('John', 'Doe')) != 0
</code></pre>
<p>这并不能解决许多可能的问题,比如“Joe Random User”、“Joe R User”和“J.R.User”是同一个人。这应该在另一个层面上加以解决。在</p>
<p>如果你用一两个例子更详细地陈述你的情况,答案会更好。在</p>
<p>您可能还对库规范化作者姓名的方式感兴趣。人们用<a href="http://informationr.net/ir/9-4/paper192.html" rel="nofollow">elaborate</a><a href="http://www.asis.org/Conferences/AM09/open-proceedings/papers/18.xml" rel="nofollow">schemes</a>来匹配名字。在</p>