Така че се опитвам да създам дърво с помощта на Python, за да мога да опитам да прочета текстов файл, който има повтарящи се количества във файла, и да се опитам да създам дърво от тези стойности и да върна изреченията с първите 3 стойности (обяснено по-подробно по-долу).
Първо потърсих в wikipedia как се създава дърво и също видях предишни примери в stackoverflow като: Този. и този. Въпреки това успях да направя това само доколкото кодът е:
import fileinput
setPhrasesTree = 0
class Branch():
def __init__(self, value):
self.left = None
self.right = None
self.value = value
class Tree():
def __init__(self):
self.root = None
self.found = False
#lessThan function needed to compare strings
def lessThan(self, a, b):
if len(a) < len(b):
loopCount = len(a)
else:
loopCount = len(b)
for pos in range(0, loopCount):
if a[pos] > b[pos]:
return False
return True
def insert(self, value):
self.root = self.insertAtBranch(self.root, value)
def exists(self, value):
#set the class variable found to False to assume it is not there
self.found = False
self.findAtBranch(self.root, value)
return self.found
#Used to fine a value in a tree
def findAtBranch(self, branch, value):
if branch == None:
pass
else:
if branch.value == value:
self.found = True
else:
self.findAtBranch(branch.left, value)
self.findAtBranch(branch.right, value)
def insertAtBranch(self, branch, value):
if branch == None:
return Branch(value)
else:
if self.lessThan(branch.value, value):
branch.right = self.insertAtBranch(branch.right, value)
else:
branch.left = self.insertAtBranch(branch.left, value)
return branch
def loadTree(filename, treeType):
if treeType == setPhrasesTree:
for sentence in fileinput.input("setPhrases.txt"):
print(sentence)
setPhrases.insert(sentence[:-1])
def findSentenceType(sentence):
if sentence.exists(sentence):
return setPhrasesTree
Ето как изглежда текстовият файл. Имайте предвид, че той е целенасочено изложен по този начин, а не със стойност на количеството до него (име на файл = setPhrases.txt):
Hi my name is Dave.
Thank-You.
What is your name?
I have done all my homework.
What time is dinner?
What is your name?
Thank-You.
Hi my name is Dave.
What is your name?
I have done all my homework.
What is your name?
Can you bring me a drink Please?
Can you bring me a drink Please?
What is your name?
Hi my name is Dave.
What is your name?
Can you bring me a drink Please?
Ето какво се опитвам да накарам кода си да прави. Трябва ми, за да разпозная, че първото изречение във файла е началният възел. И тогава трябва да събере всички други изречения, които са еднакви и да добави стойност към това изречение и просто да използва дървото, за да може да направи това. (Първоначално направих това по друг начин, но трябва да използвам дърво, за да мога да преброя и да направя всички други неща) Ето какво имам предвид:
След това искам да мога да върна първите 3 Phrases
с най-високите честоти. Така че в този случай системата ще върне изреченията (в този ред):
What is your name?
Hi my name is Dave.
Can you bring me a drink please?
Всяка помощ е много ценена. Също така благодаря за отделеното време.
Hi my name is Dave., 5
И така, нека си представим, че Здравейте, името ми е Дейв има стойност/сметка 5 до него, тъй като е използвано 5 пъти. Всеки път, когато бъде избран, резултатът се увеличава с +1. Ето предишния ми пример, за който мислех, че знаех как да направя след известна помощ, но не успях да внедря отговора в моя код - person PythonNovice   schedule 07.02.2014