繁体   English   中英

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

[英]How to not count punctuation between words

对仅用诸如“不应”之类的单词计数的单引号进行计数的最佳方法是什么。

例如,“我不应该那样做”计数一次,但是“我不愿意那样做”计数为零

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

我一直无法尝试很多成功。 我只能使用基本的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

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

您可以检查它是否单词中:

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

  • 标点p在单词2
  • 单词w不以标点p开头( w[0]
  • 单词w不以标点p结尾( w[-1]

一种更pythonic的方式是使用str可用的方法, endswithstartswith

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

您可以使用正则表达式[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM