def draw_shape(side_length, iterations):
import turtle
def rotate(length):
turtle.speed(0)
turtle.penup()
turtle.setheading(90)
turtle.forward(length / 2)
turtle.setheading(180)
turtle.forward(length / 2)
turtle.setheading(0)
turtle.pendown()
def draw_square(length):
turtle.color("red")
for i in range(4):
turtle.forward(length)
turtle.right(90)
def draw_triangle(length):
turtle.color("blue")
for i in range(3):
turtle.forward(length)
turtle.right(120)
def draw_circle(radius):
turtle.circle(radius)
turtle.speed(0)
rotate(side_length)
for _ in range(iterations):
draw_square(side_length)
turtle.penup()
turtle.forward(side_length / 2)
turtle.right(60)
turtle.pendown()
draw_triangle(side_length)
turtle.right(60)
turtle.forward(side_length / 2)
r = (side_length * (3 ** (0.5))) / 6
turtle.color("green")
turtle.circle(r, 705)
turtle.setheading(0)
side_length = (2 ** 0.5) * r
turtle.done()
def main():
side_length = int(input("Сторона квадрата: "))
iterations = int(input("Сколько вложений: "))
if iterations > 4:
print("Превышено кол-во вложений")
iterations = 4
draw_shape(side_length, iterations)
if __name__ == '__main__':
main()
import random
import nltk
def load_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
return text
def generate_ngrams(text):
tokens = nltk.word_tokenize(text)
bigrams = list(nltk.bigrams(tokens))
trigrams = list(nltk.trigrams(tokens))
return bigrams, trigrams
def generate_sentence_with_bigrams(bigrams):
sentence = []
if bigrams:
start_words = [bigram[0] for bigram in bigrams]
next_word = random.choice(start_words)
sentence.append(next_word)
while True:
next_word_options = [bigram[1] for bigram in bigrams if bigram[0] == next_word]
if not next_word_options:
break
next_word = random.choice(next_word_options)
sentence.append(next_word)
if len(sentence) > 20:
break
return ' '.join(sentence)
def generate_sentence_with_trigrams(trigrams):
sentence = list(random.choice(trigrams))
while True:
next_word_options = [trigram[2] for trigram in trigrams if trigram[:2] == tuple(sentence[-2:])]
if not next_word_options:
break
next_word = random.choice(next_word_options)
sentence.append(next_word)
if len(sentence) > 20:
break
return ' '.join(sentence)
filename = 'pismo_k_oneginu.txt'
text = load_text(filename)
bigrams, trigrams = generate_ngrams(text)
print("Предложения на основе биграммной модели:")
for _ in range(3):
sentence = generate_sentence_with_bigrams(bigrams)
print(sentence)
print("\n\nПредложения на основе триграммной модели:")
for _ in range(3):
sentence = generate_sentence_with_trigrams(trigrams)
print(sentence)
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
nltk.download('punkt')
nltk.download('stopwords')
stop_words = set(stopwords.words('russian'))
with open('tihiy_don.txt', 'r', encoding='utf-8') as file:
text = file.read()
words = word_tokenize(text.lower())
filtered_words = [word for word in words if word.isalnum() and word not in stop_words]
freq_dist = FreqDist(filtered_words)
most_common_words = freq_dist.most_common(int(input("Введите N:")))
print("Наиболее часто встречающиеся слова:")
for word, freq in most_common_words:
print(f"{word}: {freq}")
common_word_set = set([word for word, _ in most_common_words])
sentences_with_common_words = []
for sentence in nltk.sent_tokenize(text):
if len(set(word_tokenize(sentence.lower())) & common_word_set) > 1:
sentences_with_common_words.append(sentence)
print("\nПредложения, содержащие более одного наиболее часто встречающегося слова:")
for sentence in sentences_with_common_words:
print(sentence)
plt.figure(figsize=(10, 6))
words, freqs = zip(*most_common_words)
plt.bar(words, freqs)
plt.xlabel('Слово')
plt.ylabel('Частота')
plt.title('Распределение наиболее часто встречающихся слов')
plt.xticks(rotation=90)
plt.show()
mu, sigma = np.mean(freqs), np.std(freqs)
x = np.linspace(min(freqs), max(freqs), 100)
y = (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-(x - mu) ** 2 / (2 * sigma ** 2))
plt.plot(x, y, color='red', linestyle='--', label='Нормальное распределение')
plt.legend()
plt.show()
kmeans = KMeans(n_clusters=3)
X = np.array(freqs).reshape(-1, 1)
kmeans.fit(X)
centroids = kmeans.cluster_centers_
labels = kmeans.labels_
print("\nКластеры ключевых слов:")
for i in range(len(centroids)):
cluster_words = [word for j, (word, freq) in enumerate(most_common_words) if labels[j] == i]
print(f"Кластер {i+1}: {cluster_words}")
Top comments (0)