Я пишу программу для обнаружения коллокаций биграмм (2 слова, которые появляются вместе чаще, чем случайно, например: хот-дог). Чтобы сделать это правильно, я должен удалить все знаки препинания, которые будут храниться как их собственный элемент, но сохранить знаки пунктуации, которые являются частью слова. Например, биграмма ['US flag'] должна содержать точки в США, но ['US,'] должна быть удалена запятая. Я написал цикл for, который перебирает список пунктуаций и должен удалить соответствующий элемент, но это ничего не меняет. Кроме того, я использовал регулярные выражения для удаления большинства знаков препинания, но если я удаляю точки, то слова с точками в них также разрушаются. Будем очень благодарны за любые предложения по эффективному способу их удаления!
Вот мой код:
f = open('Collocations.txt').read()
punctuation = [',', '.', '!', '?', '"', ':', "'", ';', '@', '&', '$', '#', '*', '^', '%', '{', '}']
filteredf = re.sub(r'[,":@#?!&$%}{]', '', f)
f = f.split()
print(len(f))
for i, j in zip (punctuation, f):
if i == j:
ind = f.index(j)
f.remove(f[ind])
print(len(f))
# removes first element in the temp list to prepare to make bigrams
temp = list()
temp2 = list()
temp = filteredf.split()
temp2 = filteredf.split()
temp2.remove(temp2[0])
# forms a list of bigrams
bi = list()
for i, j in zip(temp, temp2):
x = i + " " + j
bi.append(x)
#print(len(bi))
unigrams = dict()
for i in temp:
unigrams[i] = unigrams.get(i, 0) + 1
#print(len(unigrams))
bigrams = dict()
for i in bi:
bigrams[i] = bigrams.get(i, 0) + 1
#print(len(bigramenter code here`