Skip to content

Instantly share code, notes, and snippets.

@fhardison
Created October 12, 2023 18:14
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 fhardison/94276bb01c6bc53d73041e8f7bc81052 to your computer and use it in GitHub Desktop.
Save fhardison/94276bb01c6bc53d73041e8f7bc81052 to your computer and use it in GitHub Desktop.
A cli tool to get sense data for a lemma and then find verses in which it occur using the macula-greek repo
from collections import defaultdict
import sys
import csv
filename = 'macula-greek-SBLGNT.tsv'
lemmas_domain = defaultdict(set)
lemmas_senses = defaultdict(set)
with open(filename, 'r') as csvfile:
reader = csv.reader(csvfile, delimiter='\t')
for row in reader:
if '!' not in row[1]:
continue
verse = row[1].split('!', maxsplit=1)[0]
lemma = row[10]
domain = row[22].split(' ')
senses = row[23].split(' ')
for x in domain:
lemmas_domain[(lemma, x)].add(verse)
for x in senses:
lemmas_senses[(lemma, x)].add(verse)
lemma = sys.argv[1]
sense = sys.argv[2]
def stack_results(res):
out = {}
for r in res:
book, cv = r.split(' ', maxsplit=1)
if book in out:
out[book].append(cv)
else:
out[book] = [cv]
output = []
for book, cvs in out.items():
output.append(book + ' ' + ','.join(cvs))
return ';'.join(output)
if sense == '*':
print("displaying senses for " + lemma)
senses = defaultdict(set)
domains = defaultdict(set)
for (l, x) in lemmas_senses.keys():
senses[l].add(x)
if lemma in senses:
print(' '.join(senses[lemma]))
exit()
elif ' ' in sense:
verses = defaultdict(dict)
for (l, x), vs in lemmas_senses.items():
if sense in vs and l == lemma:
print(f"{lemma}: {x}")
else:
print(stack_results(lemmas_senses[(lemma, sense)]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment