如何在单词中单独计算“n”的数量而不是n?

时间:2015-05-06 13:10:16

标签: python

我有一个清单:

  

'mor:co |记住亲|你v | count-PAST','mor:det:num | one det:num | two   det:num | three det:num | four det:num | five','mor:pro:wh | what mod | do& PAST   亲|你v |带n:prop | Ursula','mor:pro:sub | I v |带来& PAST qn | some   n | puppet-PL','mor:pro |你v |想要inf |到v |看看adv | in coord |和   V |见”,......

如何计算单独n的数量,省略单词中的出现次数。

(符号n代表名词,所以我想计算那些,但忽略它出现在单词中的位置 - 例如count-PASTdet:num)。

1 个答案:

答案 0 :(得分:0)

你可以使用前瞻和后视:

lines="""'mor:co|remember pro|you v|count-PAST', 'mor:det:num|one det:num|two det:num|three det:num|four det:num|five', 'mor:pro:wh|what mod|do&PAST pro|you v|bring n:prop|Ursula', 'mor:pro:sub|I v|bring&PAST qn|some n|puppet-PL', 'mor:pro|you v|want inf|to v|look adv|in coord|and v|see'"""


import re
print(re.findall("(?<=\s)n(?=[\|:])",lines))
['n', 'n']

哪个匹配n:prop|n|puppet-PL,假设之前总是有空格,之后是|:

根据您的数据结构,您也可以使用翻译:

print(lines.translate({ord(":"):" ",ord("|"): " "}).split().count("n"))
2

对于python2:

from string import maketrans
tbl = maketrans(":|","  ")
lines.translate(tbl).split().count("n")

翻译效率更高:

In [8]: tbl = maketrans(":|","  ")

In [9]: timeit lines.translate(tbl).split().count("n")
100000 loops, best of 3: 4.07 µs per loop

In [10]: r = re.compile("(?<=[\s])n(?=[\|:])")

In [11]: timeit len(r.findall(lines))
100000 loops, best of 3: 9.27 µs per loop