Python 从非';不属于一个词

Python 从非';不属于一个词,python,nlp,Python,Nlp,我正在写一个程序来检测bigrams的搭配(两个单词经常出现在一起,比如热狗)。为了正确地执行此操作,我必须删除所有将存储为其自身元素的标点符号,但保留作为单词一部分的标点符号。例如,bigram['U.S.flag']应保留句点,但['U.S.,']应删除逗号。我编写了一个for循环,循环遍历标点符号列表,应该删除匹配的元素,但这不会改变任何东西。此外,我使用正则表达式删除了大多数标点符号,但如果我删除句点,那么带句点的单词也会被破坏。任何关于有效消除这些问题的建议都将不胜感激 以下是我目前的

我正在写一个程序来检测bigrams的搭配(两个单词经常出现在一起,比如热狗)。为了正确地执行此操作,我必须删除所有将存储为其自身元素的标点符号,但保留作为单词一部分的标点符号。例如,bigram['U.S.flag']应保留句点,但['U.S.,']应删除逗号。我编写了一个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`
替换

for i, j in zip (punctuation, f):
    if i == j:
        ind = f.index(j)
        f.remove(f[ind])

而i
将保留两边各有一个字母的标点符号(例如,U.S.a.将成为U.S.a),但在我看来,不可能区分最后一个句点和句号,例如U.S.a
和Hello

while i < len(f)-2:
    c1 = f[i]
    c2 = f[i+1]
    c3 = f[i+2]
    if c2 in punctuation and not (c1 in string.ascii_letters and c3 in string.ascii_letters):
        f = f[:i+1] + f[i+2:]
    i+=1