这个问题很简单,但我很遗憾。
输入文字:
'/ / 1/2 / CD / IN /所有/ DT US / NNP企业/ NNS的/更少/ RBR是/ VBP sole / JJ proprietorships / NNS?/。'
代码:
def get_words(pos_sent):
# Your code goes here
s = ""
x = re.findall(r"\b(\w*?)/\w*?\b", pos_sent)
for i in range(0, len(x)):
s = s + " " + x[i]
return s
def get_noun_phrase(pos_sent):
# Penn Tagset
# Adjetive can be JJ,JJR,JJS
# Noun can be NN,NNS,NNP,NNPS
t = get_words(pos_sent)
regex = r'((\S+\/DT )?(\S+\/JJ )*(\S+\/NN )*(\S+\/NN))'
return re.findall(regex, t)
第一部分只是删除了部分语音标签,第二部分应该采用它并用它来查找名词短语。
它应该输出:
[’all US businesses’, ’sole proprietorships’]
但它输出一个空列表:
[]
现在,我可以更改它以接受原始标记的句子,然后我得到:
[('all/DT US/NN', 'all/DT ', '', '', 'US/NN'), ('businesses/NN', '', '', '', 'businesses/NN'), ('sole/JJ proprietorships/NN', '', 'sole/JJ ', '', 'proprietorships/NN')]
它确实拥有所有正确的位,但它还有其他一些我不想要的东西。
我仍然是正则表达式的新手,所以我可能会错过一些愚蠢的东西。
答案 0 :(得分:0)
对于您的第一个功能,请使用以下正则表达式 - from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(url)
time.sleep(5)
htmlSource = driver.page_source
- 这样您就可以确保“1/2”保持为\b([0-9A-z\/]*)\/\w*?\b
,而不是1/2
(同时改进)输出文本的格式化):
1 2