[英]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可用的方法, endswith
和startswith
:
...
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.