我是python的初学者,我正在寻找以下问题的解决方案。
我必须“扫描”文本以查找概念。
一个概念如下:(电动3d汽车)
我必须寻找“汽车”一词的出现,其中在3个字词(“ 3d”)附近还有另一个是“电气”的(例如常规电动汽车,电动推进汽车,电动自动驾驶汽车等) )
我知道您可以像处理单词和标点的列表一样处理文本。
我考虑了以下解决方案:
with open(filepath) as fp:
concept=['motor','3d','car']
concept_appearences=0 ## counters
concept_positions=[]
concept_list=[]
word1 = concept[0]
word2 = concept[2]
separator=concept[1]
distance=[int(s) for s in separator if s.isdigit()]
distance=int(distance[0])
distanceright=distance
if 'd' in separator: distanceleft=distance
if 'w' in separator: distanceleft=0
for line in fp:
## look for the concepts in every line which is like a paragraph
for index,word in enumerate(line.split()):
if word.upper()==word1.upper():
## i found the first concept-word
for i in range(index-distanceleft,index+distanceright,1):
if line.split()[i]==word2:
##print('thline.split()[i],word2)
print('i found the concept in postion', i )
start,end=i,index
if index<i:start,end=index,i
print('check:',line.split()[start:end+1])
concept_appearences +=1
concept_list.append(line.split()[start:end+1])
concept_positions.append(start)
print('the concept appeared {} times'.format(concept_appearences))
print('in positoins',concept_positions)
print('list of concepts',concept_list)
注意:两个词之间存在一个点,会将匹配排除在概念之外的情况尚未实现。 (例如:等等等等。我姑姑的东西等等……出于明显的原因不应该引起轰动)
可能不是超级Python代码,但到目前为止它仍然有效。 这里的问题是。
第一: 在我看来,这是一个非常普遍的问题。是否有特定的库? 除了“邻近运算符”之外,我什至不知道此类名称的“技术”名称 注意:我阅读了很多有关NLTK(NL库)的信息,但并未真正找到解决方案。
第二: 任何想法如何使此代码可扩展?意思是,当在不超过10个字的汽油中寻找“汽油”周围的(电动3d汽车)时,这种(电动3d汽车)本身就可以成为概念中的一个概念: ((3d电动汽车)10w汽油)
第三: 如果没有此类库,欢迎对速度发表任何评论,我必须在100页的文字中寻找数千个概念。
非常感谢。
按照@Mathieu thx的要求重新编辑以添加输入和输出文件。
输入文字: 参照图1至图4。参照图1至3,电动汽车1包括车身2,成对的前后两个地面接合轮3、4,通过合适的变速器(未示出)驱动前轮3的电动机5以及用于供电的电池组6A,6B。电动机5的电力。适于由汽车驾驶员操作的合适的控制装置(未显示)用于控制电动机5的运行,从而控制汽车1的运动。在车库中发现的一辆老式电动汽车被涂成黄色。而不是蓝色。
输出: 这个概念出现了两次 在positoins [7,82] 列表[['electrical','car'],['electrical','driven','car']]