簡體   English   中英

使用Python使用字典值對語料庫中的單詞進行計數的函數

[英]A function to count words in a corpora using dictionary values using Python

我是一名Python新手,嘗試使用特定單詞的字典來獲取在語料庫(語料庫)中出現的單詞數。 語料庫是已被標記化,歸一化,詞形化和詞干化的字符串類型。

dict = {}
dict ['words'] =  ('believe', 'tried', 'trust', 'experience')
counter=0
Result = []
for word in corpora:
    if word in dict.values():
        counter = i + 1
        else counter = 0

此代碼在dict.values()行上產生語法錯誤。 任何幫助表示贊賞!

  1. 不要做dict = {} dict是一個內置函數,您正在對其進行陰影處理。 這不是關鍵,如果以后需要,將無法使用。
  2. 字典是鍵→值映射。 就像一本真正的字典(單詞→翻譯)。 您所做的是說值('believe', …)是一個元組,對應於字典中的鍵'word' 然后,您將使用dict.values() ,該字典為您提供了字典中存儲的所有值的序列,在您的情況下,該序列僅包含一個項目,而該項目是一個元組。 您的if條件永遠不會為Trueword是一個字符串,而dict.values()是一個序列,由單個字符串元組組成。
  3. 我不太確定為什么要使用字典。 看來您有一組對您來說很重要的單詞,並且您正在掃描corpora並計算這些單詞的出現次數。 這里設置了關鍵字。 您不需要字典,而需要set
  4. 不清楚,您在計算什么。 那是什么i要添加到counter 如果您打算將counter遞增1,則應為counter = counter + 1或簡單地為counter += 1
  5. 為什么要重置counter

     counter = 0 

    當您發現未知字詞時,我認為您並不是真的要重置計數器。 似乎字詞不應該改變您的計數器,然后,請不要改變它。

  6. 筆記。 盡量避免在變量名中使用大寫字母( Result = []錯誤)。 同樣,正如其他人所提倡的那樣,您在else也缺少冒號。

所以,現在讓我們把它們放在一起。 首先要做的是寫出我們感興趣的一組單詞:

words = {'believe', 'tried', 'trust', 'experience'}

接下來,您可以遍歷語料庫中的單詞,並查看其中的哪些單詞:

for word in corpora:
    if word in words:
        # do something

目前尚不清楚確切的代碼應該做的,但如果你的目標是要知道有多少次組中的所有詞語的語料中發現一起,那么你只需要添加一個到counter里面那if

如果您想知道集合中的每個單詞出現在語料庫中的次數,則必須為集合中的每個單詞維護一個單獨的計數器(這可能是字典的地方)。 使用collections.Counter (這是一本特殊的字典)可以輕松實現這一點,並且您必須過濾語料庫以僅留下您感興趣的單詞,這就是ifilter可以幫助您的地方。

filtered_corpora = itertools.ifilter(lambda w: w in words, corpora)

—這是您的語料庫,將刪除單詞中未找到的所有words 您可以立即將其通過Counter

對於第一種情況(即僅需要總數時),此技巧也很有用。 您只需返回此filter ed corpora( len(filtered_corpora) )的長度。

您有多個問題。 您沒有在此處的示例中定義corpora 您正在重新定義dict ,它是內置類型。 else未正確縮進。 dict.values()返回一個可迭代的對象,每個對象都是一個元組; word不會在里面吧,如果字是一個字符串。 實際上,還不清楚counter計數。 Results在那里做什么?

您的代碼可能與此(偽)代碼相似

d = {'words' : ('believe', 'tried', 'trust', 'experience')} #if that's really what you want
counter = {}
for word in corpora:
    for tup in d.values(): # each tup is a tuple
        if word in tup:
            x = counter[word] if word in counter else 0
            counter[word] = x+1

有一種較短的方法。

這項計算事物的任務非常普遍,以至於在庫中存在一個用於執行此任務的特定類: collections.Counter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM