Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- g = ['а', 'е', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я']
- x = input("Введите слово: ")
- x = list(x)
- rv = []
- r1 = []
- r2 = []
- # массив индексов гласных букв
- vowel = []
- refl = []
- # проверка гласная ли буква
- def gl(i):
- t = "false"
- for j in g:
- if (i == j):
- t = "true"
- return t
- index = 0
- for i in x:
- if (gl(i) == "true"):
- vowel.append(index)
- index = index + 1
- rv = x[vowel[0] + 1:]
- index = 0
- for j in vowel:
- if ((j != len(x) - 1) and (gl(x[j + 1]) == "false") and (index < 2)):
- refl.append(j)
- index = index + 1
- print(refl)
- if (len(refl) == 2):
- r1 = x[refl[0] + 2:]
- r2 = x[refl[1] + 2:]
- elif (len(refl) == 1):
- r1 = x[refl[0] + 2:]
- print(x)
- print(rv)
- print(r1)
- print(r2)
- # массивы окончаний
- # Окончаниям из групп 1 должна предшествовать буква а или я
- perf_gerund1 = ["вшись", "вши", "вш"]
- perf_gerund2 = ["ившись", "ивши", "ив", "ывшись", "ывши", "ыв"]
- pg = [perf_gerund1, perf_gerund2]
- adj = ["ее", "ие", "ые", "ое", "ими", "ыми", "ей", "ий", "ый", "ой", "ем", "им", "ым", "ом", "его", "ого", "ему", "ому",
- "их", "ых", "ую", "юю", "ая", "яя", "ою", "ею"]
- partic1 = ["ем", "нн", "вш", "ющ", "щ"]
- partic2 = ["ивш", "ывш", "ующ"]
- partic = [partic1, partic2]
- refl = ["ся", "сь"]
- v1 = ["ла", "на", "ете", "йте", "ли", "й", "ло", "ем", "нно", "ет", "ют", "ны", "ть", "ешь", "но", "л", "н"]
- v2 = ["ила", "ыла", "ена", "ейте", "уйте", "ите", "или", "ыли", "ей", "уй", "ило", "ыло", "им", "ым", "ено", "ил", "ыл",
- "ены", "ят", "ует", "уют", "ить", "ыть", "ен", "ит", "ыт", "ишь", "ую", "ю"]
- v = [v1, v2]
- noun = ["ев", "ов", "ией", "ье", "иями", "ями", "ами", "еи", "ии", "ием", "ей", "ой", "ий", "й", "иям", "ям", "ие", "ем",
- "ам", "ом", "о", "у", "ах", "иях", "ях", "ы", "ью", "ию", "ья", "ю", "ия", "ь", "я", "а", "и", "е"]
- superl = ["ейше", "ейш"]
- deriv = ["ость", "ост"]
- # adjectival = adjective or participle + adjective
- def ending(end, word): # есть ли это окончание в конце слова
- b = True
- word = list(word)
- end = list(end)
- l = len(end) - 1
- s1 = len(word) - 1
- j = 0
- if (l > s1):
- b = False
- while (j <= l and b == True):
- if (word[s1 - j] != end[l - j]):
- b = False
- j = j + 1
- return b
- def ending_k(word, k, end): # есть ли в слове word морфемы k массива
- if (k != v and k != partic and k != pg):
- for i in k:
- if (ending(i, word)):
- end.append(i)
- else:
- for i in k[1]:
- if (ending(i, word)):
- end.append(i)
- for i in k[0]:
- if (ending('a' + i, word)):
- end.append(i)
- return (end)
- x1 = ''.join(rv) # rv часть
- x0 = ''.join(''.join(x).replace(x1, '')) # до rv
- print(x1)
- # шаг 1
- en = []
- en = ending_k(x1, pg, en)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- else:
- en = ending_k(x1, refl, en)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- en = []
- b = 0
- for i in partic1:
- for j in adj:
- if (i + j in x1):
- en.append(i + j)
- b = 1
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- en = []
- if (b == 0):
- for i in partic2:
- for j in adj:
- if (i + j in x1):
- en.append(i + j)
- b = 1
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- en = []
- if (b == 0):
- en = ending_k(x1, adj, en)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- en = []
- adj = 0
- c = [noun, v]
- while (b != 1 and adj < len(c)):
- en = ending_k(x1, c[adj], en)
- print(len(x1), adj)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- b = 1
- adj = adj + 1
- en = []
- print(x1, " - 1 step")
- x1 = list(x1)
- # шаг 2
- if (x1[len(x1) - 1] == 'и'):
- del x1[len(x1) - 1]
- print(x1, " - 2 step")
- # шаг 3
- r2 = ''.join(r2)
- x1 = ''.join(x1)
- en = ending_k(r2, deriv, en)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- en = []
- print(x1, " - 3 step")
- # шаг 4
- en = ending_k(r2, superl, en)
- if (len(en) != 0):
- x1 = x1.replace(max(en), '')
- x1 = list(x1)
- if (x1[len(x1) - 1] == 'н' and x1[len(x1) - 2] == 'н'):
- del x1[len(x1) - 1]
- elif (x1[len(x1) - 1] == 'ь'):
- del x1[len(x1) - 1]
- x1 = ''.join(x1)
- print(" - 4 step")
- print(x0 + x1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement