我有一个清单:
'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-PAST
,det:num
)。
答案 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