python - 在带有邻近运算符的 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 次
解决方案
推荐阅读
- ios - 如何在 iOS UISplitViewController 中隐藏 displayModeButtonItem?
- magento2 - 在结帐页面 Razorpay 支付网关上显示名为电子邮件 ID 的 magento 2 错误
- javascript - 当默认显示为无时,引导程序如何计算折叠组件的高度
- graphql - 如何在 Netflix DGS 解析器中获取标头信息
- postgresql - PostgreSQL 基于来自不同表的 FK 关联添加约束
- python - Python HTTP 1.1 从头开始请求
- r - 从长度不等的数据帧列表中提取 colname 并在 R 中创建 colname 数据帧
- operating-system - 系统调用统计xv6中系统调用的次数
- r - raster 包中的 rasterize 函数遇到的问题
- android - 如何在片段中使用 androidx.navigation.fragment.NavHostFragment