Skip to content

Instantly share code, notes, and snippets.

@xrotwang
Created December 18, 2014 10:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xrotwang/6d19429bfc7931ed29db to your computer and use it in GitHub Desktop.
Save xrotwang/6d19429bfc7931ed29db to your computer and use it in GitHub Desktop.
Get list of phonologies from glottolog
import json
from sqlalchemy import not_
from sqlalchemy.orm import joinedload
from clld.scripts.util import parsed_args
from clld.db.meta import DBSession
from glottolog3.models import Ref, Doctype, Languoid, Provider
def main(args):
with open(args.data_file('phoible-isocodes.json')) as fp:
covered = json.load(fp).keys()
q = DBSession.query(Ref).join(Ref.languages).join(Ref.doctypes).join(Ref.providers)\
.filter(Doctype.pk.in_([3, 8, 11]))\
.filter(Provider.pk == 21)\
.filter(not_(Languoid.hid.in_(covered)))\
.options(joinedload(Ref.languages))
print q.count()
with open(args.data_file('phoible-phonologies.bib'), 'w') as fp:
for ref in q:
rec = ref.bibtex()
rec['glottolog_url'] = 'http://glottolog.org/resource/reference/id/%s' % ref.id
rec['languages'] = ', '.join('%s [%s][%s]' % (l.name, l.id, l.hid) for l in ref.languages if l.hid not in covered)
fp.write('\n%s' % unicode(rec).encode('utf8'))
if __name__ == '__main__':
main(parsed_args())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment