2013-10-29 58 views
0

我試圖以[[(貓),(貓,with),(with,fur)] [(the,dog)]形式列出列表, (狗,有),(帶,球)......等來自與線句子的文本文件,如:Python中的列表(使用NLTK)

皮草\ n 狗與球貓\ n

我遇到的問題是,當我正在讀取文件中的行,逐個字,製作元組(變量標籤)和創建最終列表(變量連接)時,空的實例連接到0.呃,實際上不是0 b旦是列表中顯示,例如[[] [],[]]

這是的那部分程序代碼: 張開( 'corpus.txt', 'R')爲f:

with open('corpus.txt', 'r') as f: 
    for line in f: 
     cnt = 0 
     sa = nltk.word_tokenize(line) 
     label[:] = [] 

     for i in sa: 
      words.append(i) 
      if cnt>0: 
       try: label +=[(prev , i)] 
       except: NameError 
      prev = i 
      cnt = cnt + 1 

     if label != []: 
      connection += [label] 
      print connection 

我希望有人能夠理解我的問題,因爲這會讓我發瘋,而且我的時間不夠用了。我只想知道我在這裏做錯了什麼,所以我可以在每個循環中更新我的連接列表,而不會丟失之前保存的內容。

感謝您的幫助

+0

難道是安全地說,你有句子,每個句子被表示爲一個單詞列表的列表,你想要在每個句子中列出兩個bigrams? – inspectorG4dget

+0

準確地說,不知道這個詞bigram是如此,這很容易說:) PS:其實我想要所有文件的二元論,但在'子列表'中分開[[(a1,a2),(a2,a3) )],[(b1,b2),(b2,b3)] –

回答

1

我沒有安裝NLTK,但看看這對你的作品:

with open('corpus.txt', 'r') as f: 
    answer = [] 
    for line in f: 
     cnt = 0 
     sa = nltk.word_tokenize(line) 
     answer.append([tuple([char, sa[i+1]]) for i,char in enumerate(sa[:-1])]) 
+0

OMG謝謝哈哈,工作得很好,我可以繼續編碼! ... 10000謝謝你,先生! –

+0

@FranciscoArriagadaArroyo:大聲笑!樂於幫助。祝好運與您的程序的其餘部分 – inspectorG4dget

0

您可以使用nltk.bigrams讓你的元組,不用擔心邊界條件正好。如果words是在句子中的單詞的列表,你會得到所有的二元語法與

bigrams = nltk.bigrams(words)