コード例 #1
0
ファイル: trie.py プロジェクト: satolyte/example
 def insert(self,word):
   currNode=self.startNode
   self.startNode.incTCounter()
   for char in word:
     prevNode=currNode
     if(not prevNode.getNext(char)):
       currNode=Node(prevNode.getString()+char)
       currNode.setTCounter(1)
       prevNode.setNext(char,currNode)
     else:
       currNode=prevNode.getNext(char)
       currNode.incTCounter()
   currNode.setIsWord(True)
   currNode.incWCounter()
コード例 #2
0
ファイル: trie.py プロジェクト: satolyte/example
class Trie():

# Constructor
  def __init__(self,words):
    self.startNode=Node("")
    for word in words:
      self.insert(word)
        
# test membership includes substrings of words
# that are not real words
  def isMember(self,string):
    currNode=self.startNode
    if string == "":
        return True
    for letter in string:
      if(not currNode.getNext(letter)):
        return False
      else:
        currNode=currNode.getNext(letter)
    return True

# test if word is a real word (word that was inserted or initialized)
  def isRealWord(self,word):
    if (self.isMember(word)):
      return self.getNode(word).getIsWord()
    else:
      return False
          
  # returns the node searched or an empty node not in the trie
  # containing string "Node Not Found"
  def getNode(self,word):
    if (self.isMember(word)):
      if word == "":
        return self.startNode
      currNode=self.startNode
      counter = 0
      for letter in word:
        currNode=currNode.getNext(letter)
        if (counter == len(word)-1):
            return currNode
        counter = counter + 1
    else:
      return Node("Node Not Found")

  # insert a word into the trie
  def insert(self,word):
    currNode=self.startNode
    self.startNode.incTCounter()
    for char in word:
      prevNode=currNode
      if(not prevNode.getNext(char)):
        currNode=Node(prevNode.getString()+char)
        currNode.setTCounter(1)
        prevNode.setNext(char,currNode)
      else:
        currNode=prevNode.getNext(char)
        currNode.incTCounter()
    currNode.setIsWord(True)
    currNode.incWCounter()
        
  # update frequency of a word if in trie
  # returns true on success / false if word not found
  def setFreqKey(self,word, freq):
    if (self.isMember(word)):
      currNode=self.startNode
      for char in word:
        currNode=currNode.getNext(char)
        currNode.setCounter(currNode.getWCounter() + freq)
      return True
    else:
      return False
      
  def setFreq(self,word,freq):
    if (self.setFreqKey(word, freq)):
      return self.setFreqKey(word[:-1], -1*freq)
    else: 
      return False
      
  
  # return a list of (letter,frequency) tuples [(letter, freq), ...]
  def getFreq(self,word):
    currNode=self.startNode
    freqList = []
    for char in word:
      currNode=currNode.getNext(char)
      freqList.append((currNode.getString(), currNode.getCounter()))
    return freqList