0
我有一個三列的文件(用\ t分隔;第一列是詞,第二列是詞條,第三列是標籤)。有些行只包含點或逗號。如何從整個文件的列表中統計詞頻?
<doc n=1 id="CMP/94/10">
<head p="80%">
Customs customs tag1
union union tag2
in in tag3
danger danger tag4
of of tag5
the the tag6
</head>
<head p="80%">
New new tag7
restrictions restriction tag8
in in tag3
the the tag6
.
Hi hi tag8
假設用戶搜索引理「in」。我想要在「in」之前和之後的「in」的頻率和引理的頻率。所以我想要在整個語料庫中使用「聯合」,「危險」,「限制」和「該」的頻率。結果應該是:
union 1
danger 1
restriction 1
the 2
我該怎麼做?我試圖使用lemma_counter = {}
但它不起作用。
我沒有經驗的Python語言,所以請糾正我,如果我有什麼問題。
c = open("corpus.vert")
corpus = []
for line in c:
if not line.startswith("<"):
corpus.append(line)
lemma = raw_input("Lemma you are looking for: ")
counter = 0
lemmas_before_after = []
for i in range(len(corpus)):
parsed_line = corpus[i].split("\t")
if len(parsed_line) > 1:
if parsed_line[1] == lemma:
counter += 1 #this counts lemma frequency
new_list = []
for j in range(i-1, i+2):
if j < len(corpus) and j >= 0:
parsed_line_with_context = corpus[j].split("\t")
found_lemma = parsed_line_with_context[0].replace("\n","")
if len(parsed_line_with_context) > 1:
if lemma != parsed_line_with_context[1].replace("\n",""):
lemmas_before_after.append(found_lemma)
else:
lemmas_before_after.append(found_lemma)
print "list of lemmas ", lemmas_before_after
lemma_counter = {}
for i in range(len(corpus)):
for lemma in lemmas_before_after:
if parsed_line[1] == lemma:
if lemma in lemma_counter:
lemma_counter[lemma] += 1
else:
lemma_counter[lemma] = 1
print lemma_counter
fA = counter
print "lemma frequency: ", fA
謝謝您的答覆。我發現,我的文件並不完全符合我的預期。有些行只包含一個點或逗號,所以元組不會爲它們工作。我試過這個:'如果不是line.startswith('<'):' '如果len(line)> 1:'但它仍然給我一個錯誤「需要多個值才能解包」。 – halik 2013-04-29 07:32:32
@halik你必須考慮到每個'line'在它被添加到'corpus'之前,還包含新的行字符('\ n'),所以最初每個'line'的長度大於1. I調整了我的答案。 – 2013-04-29 10:13:52