4.3 比较词表

表格词典的另一个例子是比较词表。NLTK 中包含了所谓的斯瓦迪士核心词列表,几种语言中约 200 个常用词的列表。语言标识符使用 ISO639 双字母码。

  1. >>> from nltk.corpus import swadesh
  2. >>> swadesh.fileids()
  3. ['be', 'bg', 'bs', 'ca', 'cs', 'cu', 'de', 'en', 'es', 'fr', 'hr', 'it', 'la', 'mk',
  4. 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sr', 'sw', 'uk']
  5. >>> swadesh.words('en')
  6. ['I', 'you (singular), thou', 'he', 'we', 'you (plural)', 'they', 'this', 'that',
  7. 'here', 'there', 'who', 'what', 'where', 'when', 'how', 'not', 'all', 'many', 'some',
  8. 'few', 'other', 'one', 'two', 'three', 'four', 'five', 'big', 'long', 'wide', ...]

我们可以通过在entries() 方法中指定一个语言列表来访问多语言中的同源词。更进一步,我们可以把它转换成一个简单的词典(我们将在3学到dict()函数)。

  1. >>> fr2en = swadesh.entries(['fr', 'en'])
  2. >>> fr2en
  3. [('je', 'I'), ('tu, vous', 'you (singular), thou'), ('il', 'he'), ...]
  4. >>> translate = dict(fr2en)
  5. >>> translate['chien']
  6. 'dog'
  7. >>> translate['jeter']
  8. 'throw'

通过添加其他源语言,我们可以让我们这个简单的翻译器更为有用。让我们使用dict()函数把德语-英语和西班牙语-英语对相互转换成一个词典,然后用这些添加的映射 更新 我们原来的翻译词典:

  1. >>> de2en = swadesh.entries(['de', 'en']) # German-English
  2. >>> es2en = swadesh.entries(['es', 'en']) # Spanish-English
  3. >>> translate.update(dict(de2en))
  4. >>> translate.update(dict(es2en))
  5. >>> translate['Hund']
  6. 'dog'
  7. >>> translate['perro']
  8. 'dog'

我们可以比较日尔曼语族和拉丁语族的不同:

  1. >>> languages = ['en', 'de', 'nl', 'es', 'fr', 'pt', 'la']
  2. >>> for i in [139, 140, 141, 142]:
  3. ... print(swadesh.entries(languages)[i])
  4. ...
  5. ('say', 'sagen', 'zeggen', 'decir', 'dire', 'dizer', 'dicere')
  6. ('sing', 'singen', 'zingen', 'cantar', 'chanter', 'cantar', 'canere')
  7. ('play', 'spielen', 'spelen', 'jugar', 'jouer', 'jogar, brincar', 'ludere')
  8. ('float', 'schweben', 'zweven', 'flotar', 'flotter', 'flutuar, boiar', 'fluctuare')