我有一个包含260个句子的file tagged by part-of-speech。我想要计算这个标记文件的每句话的词汇密度(实词-名词、动词、形容词和副词的总和-除以单词的总和)。
首先,我需要将文本拆分成句子,然后在每个句子中迭代,搜索标签并对它们进行计数。到目前为止,我只能将文本拆分成句子,但我不知道如何在每个句子中查找正确的标签(动词、名词、形容词、ADV),并对它们进行计数,以除以句子中的总单词数。有人能帮我完成这项任务吗?到目前为止,我尝试的代码如下所示。
def sent_ld():
while True:
try:
file_to_open =Path(input("\nYOU SELECTED OPTION 8: CALCULATE SENTENCE
LENGTH.
Please, insert your file path: "))
with open(file_to_open,'r', encoding="utf-8") as f:
sentences = f.read()
break
except FileNotFoundError:
print("\nFile not found. Better try again")
except IsADirectoryError:
print("\nIncorrect Directory path.Try again")
units=sentences.split('<<SPACE>>')
tags=[ 'ADJ','ADP','NOUN','ADV','AUX','CONJ','CCONJ','DET','INTJ','NOUN','NUM','PART','PRON','PROPN','PUNCT','SCONJ','SYM','VERB','X','SPACE']
pat=re.compile('[A-Z][A-Z]+')
for u in units:
m=re.findall(pat, u)
summ=[]
remaining=[]
space=[]
punct=[]
num=[]
propn=[]
d1=defaultdict(int)
for i in m:
if i in tags:
d1[i]+=1
sent_number=1
for y in d1:
if y =='ADV':
soma.append(d1[y])
elif y == 'NOUN':
soma.append(d1[y])
elif y == 'ADJ':
soma.append(d1[y])
elif y == 'VERB':
soma.append(d1[y])
elif y == 'PROPN':
soma.append(d1[y])
elif y == 'SYM':
soma.append(d1[y])
elif y == 'SPACE':
space.append(d1[y])
elif y == 'PUNCT':
punct.append(d1[y])
elif y == 'NUM':
num.append(d1[y])
else:
resto.append(d1[y])
print('Sentence',sent_number, 'lexical density is: ', sum(summ)/sum(remaining))
sent_number+=1
sent_ld()
发布于 2021-02-11 02:41:11
我不知道我是否正确理解了你的问题。但是基于您共享的file,并考虑到您能够捕获变量units
中的句子,您可以反过来将units
拆分为lines
,而不是使用defaultdict
。似乎如果您再次使用空格拆分lines
,您将得到一个长度为3的列表,每行。
这些列表中的第二项是您要查找的标记。由于在词法计数中考虑了特定的标记,因此可以在第二个循环中创建一个局部变量lexical_count
并将其设置为0。每次遇到一个词法标记时,这个变量的值都会递增1。
for sentence_num, unit in enumerate(units, 1):
lines = unit.split('\n')
total_count = len(lines)
lexical_count = 0
for line in lines:
token, tag, _ = line.split()
if tag in {'ADV', 'NOUN', 'ADJ', 'VERB', 'PROPN', 'SYM'}:
lexical_count += 1
density = lexical_count / total_count
print(f'Sentence {sentence_num}, Lexical Density is: {density}')
https://stackoverflow.com/questions/66142332
复制相似问题