You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.0 KiB

4 years ago
  1. # Klasse zum Austauschen von Genitiv durch Dativ
  2. import spacy
  3. class GenitivSolve(object):
  4. def __init__(self):
  5. #print('loading the german spacy model..')
  6. self.nlp = spacy.load('de_core_news_sm')
  7. #print('done')
  8. return
  9. def ReplaceGenitivWithDativ(self, sentences):
  10. count = 0
  11. for sentence in sentences:
  12. count += 1
  13. #print('processing sentence', count)
  14. tokens = self.nlp(' '.join(sentence))
  15. for n in range(1, len(sentence)):
  16. #print(sentence[n])
  17. if (sentence[n][-1] == 's' or sentence[n][-1] == 'n') and (sentence[n - 1] == 'des' or sentence[n - 1] == 'Des'):
  18. #print('oi')
  19. #print('genitiv', sentence[n], sentence[n][:-2])
  20. if sentence[n][-2] == 'e':
  21. sentence[n] = sentence[n][:-2]
  22. else:
  23. sentence[n] = sentence[n][:-1]
  24. sentence[n - 1] = 'dem'
  25. sentence.insert(n - 1, 'von')
  26. if sentence[n] == 'der' and sentence[n - 1][-1] != ',' and (tokens[n - 1].tag_ == 'NN' and tokens[n-1].text == sentence[n]) and sentence[n][-2:] != 'en':
  27. sentence.insert(n, 'von')
  28. if sentence[n] == 'der' and sentence[n - 1][-1] != ',' and (tokens[n - 1].tag_ == 'NN' and tokens[n-1].text == sentence[n]) and ((sentence[n+1][-2:] == 'en' or sentence[n+1][-1] == 'n' or sentence[n+1][-1] == 'e' or sentence[n+1][-2:] == 'er')):
  29. if sentence[n+1][-1] == 'e':
  30. sentence[n+1] + 'n'
  31. sentence[n] == 'den'
  32. sentence.insert(n, 'von')
  33. return sentences