首页 > 解决方案 > 在带有邻近运算符的 python 的文本中找到(两个)相邻的单词。可扩展的解决方案

问题描述

我是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)

注意:尚未实施的是两个词之间有一个点将把命中排除在概念之外的情况。(比如:等等等等电气。我阿姨的车等等等等......由于显而易见的原因,这不应该是一个打击)

可能不是超级pythonic代码,但到目前为止它可以工作。这里的问题是。

第一:在我看来,这似乎是一个相当普遍的问题。有没有专门为此的图书馆?除了“接近运算符”之外,我什至不知道这种东西的“技术”名称注意:我阅读了很多关于 NLTK(NL 库)的信息,但并没有真正找到解决方案。

第二:知道如何使这段代码可扩展吗?这意味着这个(电动 3d 汽车)本身可以成为一个概念中的一个概念,当在“gasoline”周围寻找(电动 3d 汽车)不超过 10 个字的汽油时:((电动 3d 汽车)10w汽油)

第三:如果没有此类东西的库,欢迎对速度发表任何评论,我必须在 100 页的文本中寻找数千个概念。

非常感谢。

按照@Mathieu thx 的要求重新编辑添加输入和输出文件。

输入文本:参考图。参照图1至图3,电动汽车1包括车身2、前轮和后轮对接地轮3、4、通过合适的传动装置(未示出)驱动前轮3的电动机5和用于供电的电池组6A、6B。电动机5的电力。适合于由汽车驾驶员操作的合适的控制装置(未示出)用于控制电动机5的操作并因此控制汽车1的运动。在车库中发现的一辆旧电动汽车被涂成黄色而不是蓝色。

输出:该概念在位置 [7, 82] 列表 [['electrical', 'car'], ['electrical', 'driven', 'car']] 中出现了 2 次

标签: pythonlistnlpnltkproximity

解决方案


推荐阅读