Итак, я пытаюсь создать дерево с помощью Python, чтобы попробовать и прочитать текстовый файл, который повторяет количество в файле, и попытаться создать дерево из этих значений и возвращать предложения с помощью значений Top 3 (поясняется более подробно ниже).Использование дерева в python для получения значений
Прежде всего я искал на wikipedia о том, как создается дерево, а также видел предыдущие примеры в stackoverflow как: This one. и This one. Тем не менее, я смог сделать это только в том случае, если код идет:
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?
Любая помощь очень ценится. Также спасибо за ваше время.
Правильно ли я понимаю, вы просто хотите подсчитать, как часто каждая строка присутствует в файле? Для этого вам вряд ли нужно дерево. – pentadecagon
@pentadecagon True, и, как я уже упоминал ранее, я уже смог это сделать. Однако мне нужно сделать это, используя дерево, и я не знаю, что делать дальше. – PythonNovice
Дерево не требуется? Так это упражнение? Чтобы быть уверенным, потому что вы знаете, эта проблема может быть решена более эффективно, используя словарь вместо дерева, примерно в 20 строках кода. Если вы действительно хотите дерево, то для того, чтобы дерево было полезным, вероятно, это должно быть какое-то [самобалансирующееся дерево] (http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree), наиболее популярное здесь [красно-черное дерево] (http://en.wikipedia.org/wiki/Red-black_tree). Это довольно много работы по реализации самостоятельно. – pentadecagon