如何不计算单词间的标点符号

时间:2019-04-19 08:20:26

标签: python python-3.x

仅用“应该”之类的单词来计算撇号的变量的最佳方法是什么。

例如“我不应该那样做”算一次 但是“'我不会那样做'”计数为零

基本上,我如何使用计数来计算单词而不是引号中的撇号。

我无法成功尝试很多。我只能使用基本的for循环来计算每个撇号,但不能专门缩小范围。

for sentence in split_sentences: 
        for w in sentence:
            for p in punctuation:
                if p == w:
                    if word in counts:
                        counts[p] += 1 
                    else:
                        counts[p] = 1

                else:
                    pass

对于给定的单词列表,它应该仅计入单词,而不是单词周围。 因此,“应该”不会计数,而“应该”则不会计数。

2 个答案:

答案 0 :(得分:4)

您可以检查它是否在里面一词:

for sentence in split_sentences: 
        for w in sentence:
            for p in punctuation:
                if p in w and w[0] != p and w[-1] != p:
                    if word in counts:
                        counts[p] += 1 
                    else:
                        counts[p] = 1
                else:
                    pass

重要的一行是if p in w and w[0] != p and w[-1] != p: 我们有3条规则可以计算:

  • 标语p用词2
  • w一词不以标点符号w[0]开头(p
  • 单词w的结尾不是w[-1]的结尾(p

更Python化的方法是使用可用的str方法endswithstartswith

...
if p in w and not w.startswith(p) and not w.endswith(p):
   ...

答案 1 :(得分:0)

您可以使用正则表达式[a-zA-Z]'[a-zA-Z]查找所有用字母括起来的单引号。

对连字符的要求对我来说还不是很清楚。如果它具有相同的要求(即,仅在被字母包围时才计数),而不是使用正则表达式[a-zA-Z]['-][a-zA-Z]会达到目的:它将计算引号和连字符。

如果您应该计算所有 连字符,则可以只使用str.count方法(例如 "test-string".count("-")返回1)。

这是一些示例代码,假设连字符必须仅在字母周围被计数时,也必须计算:

import re

TEST_SENTENCES = (
    "I shouldn't do that",
    "'I will not do that'",
    "Test-hyphen"
)

PATTERN = re.compile("[a-zA-Z]['-][a-zA-Z]")

for sentence in TEST_SENTENCES:
    print(len(PATTERN.findall(sentence)))

输出:

1
0
1