2017-02-22 13 views
-2

私は映画のセンチメント分析を書いていますが、コードには1つのエラーがあります。これは、基数10のint()の無効なリテラルです。コードはムービーレビューとスコアを含む別々のテキストファイルを読み込みます。 ex)4この映画は素晴らしかったです。助けてくれてありがとう!編集:エラーがここに表示されます:ライン38、スコア= INT(lineSplits [0] .strip())基数10のint()の無効なリテラルはどういう意味ですか?

import re 
class WordStatistic: 
    def __init__(self, keyword, averageScore = 0, occurences = 0): 
     self.keyword = keyword 
     self.averageScore = averageScore 
     self.occurences = occurences 

    def getWord(self) : 
     return self.keyword 

    def getAverageScore(self) : 
     return self.averageScore 

    def getOccurences(self) : 
     return self.occurences 

    def addNewScore(self, newScore) : 
     oldScoreSum = self.averageScore * self.occurences 
     self.occurences = self.occurences + 1 
     self.averageScore = (oldScoreSum + newScore)/(self.occurences) 

    def printWordStatistic(self) : 
      print ("Word   : ", self.keyword) 
      print ("Occurences : ", self.occurences) 
      print ("Average Score : ", self.occurences, "\n\n") 
# "teaching" the code 
wordDictionary = {} 
fileInstance = open("movieReviews.txt",'r') 
fileText = fileInstance.read() 

# formatting and splitting 
reviewSplits = fileText.split("movieReviews") 
for review in reviewSplits : 
     review = review.strip() 
     if review == "" : 
      continue 
     lineSplits = review.split("\n") 
     score = int(lineSplits[0].strip()) 
     for i in range(1, len(lineSplits)) : 
      wordSplits = re.split("\t| ", lineSplits[i]) 
      for word in wordSplits : 
       if word == "" : 
        continue 
       # If it is already present, then update the score and count 
       # Otherwise just add the new entry to the dictionary 
       if wordDictionary in(word) : 
        wordStatistic = wordDictionary.get(word) 
        wordStatistic.addNewScore(score) 
       else : 
        wordStatistic = WordStatistic(word, score, 1) 
        wordDictionary[word] = wordStatistic 
# print the stats of the words 
def printAllWordStatistic(wordDictionary) : 
    for wordStatistic in wordDictionary.values() : 
     wordStatistic.printWordStatistic() 
# rating the actual review 
def calculateAverageOfReview(review) : 
    review.replace("\t", " ") 
    review.replace("\n", " ") 
    wordSplits = review.split(" ") 
    averageScore = 0.0 
    totalCount = 0; 
    for word in wordSplits : 
     if wordDictionary in (word) : 
      averageScore += wordDictionary.get(word).getAverageScore() 
      totalCount = totalCount + 1 
    if totalCount != 0 : 
     return averageScore/totalCount 
    return -1 
# getting user input and append multi lines of case of multi line review 
while (True) : 
    print ("\nEnter a review : "); 
    multiLines = [] 
    while True: 
     line = input() 
     if line: 
      multiLines.append(line) 
     else: 
      break 
    inputReview = '\n'.join(multiLines) 
    averageScore = calculateAverageOfReview(inputReview) 
    if averageScore != -1 : 
     if averageScore >= 2.50 : 
      print ("Positive Review"); 
     else : 
      print ("Negative Review"); 
    else : 
     print ("Unable to rate the review"); 
    if input("\nDo you want to continue ? (Y/N) : ") != "Y" : 
     print ("Quitting the session."); 
     exit() 
+2

文字列中の文字のうちの1つが '1234567890。+ - 'にないことを意味します。すなわち、基数10の算術に現れない文字列に文字が現れる。 –

+0

これは、一文の質問のためのコードの大部分です。 –

+1

問題を1行または2行に絞り込むことができます。今、あなたの[MCVE]を提示してください。 –

答えて

1

をそれは、int0-9ない文字で何をすべきかわからないことを意味します。あなたは外の数を引くしたいいくつかの任意の文字列を持っている場合は、正規表現を使用することができ、その代わりに:

score = int(lineSplits[0].strip()) 

桁の最初のグループをつかむだろう

score = int(re.search('[0-9]+', lineSplits[0]).group())) 

ような何か。

関連する問題