Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python嵌套列表与(随机变量)匹配_Python_List_Python 2.7_Pattern Matching_Match - Fatal编程技术网

将python嵌套列表与(随机变量)匹配

将python嵌套列表与(随机变量)匹配,python,list,python-2.7,pattern-matching,match,Python,List,Python 2.7,Pattern Matching,Match,我正在做一些字符串之间的匹配 t1 = '[go:VB, [like:IN, [i:PR]], [to:TO], [there:RB]]' t2 = '[A, [like:IN, [B]], [to:TO], [C]]' t1和t2的形状均为X:Y 我称之为 X:word Y:标记 我想让你 t1 == t2 在本例中,如果我们说: for i in t1: if i.tag in (‘NN’, ‘RB’, ‘JJ’,’ VB’, PN’): X:Y = #ANY

我正在做一些字符串之间的匹配

t1 = '[go:VB, [like:IN, [i:PR]], [to:TO], [there:RB]]'
t2 = '[A, [like:IN, [B]], [to:TO], [C]]'
t1和t2的形状均为X:Y

我称之为

X:word

Y:标记

我想让你

t1 == t2
在本例中,如果我们说:

for i in t1: 
    if i.tag in (‘NN’, ‘RB’, ‘JJ’,’ VB’, PN’):
        X:Y = #ANY ONE UPPER CASE VARIABLE
t1 = ['[go:VB', ' [like:IN', ' [i:PR]]', ' [to:TO]', ' [there:RB]]']
t2 = ['[A', ' [like:IN', ' [B]]', ' [to:TO]', ' [C]]']
我不能这样做是因为它们不是列表,我不能这样做是因为()在列表中不被接受

我做的小麦是我分开的(',')

现在的新列表类似于:

for i in t1: 
    if i.tag in (‘NN’, ‘RB’, ‘JJ’,’ VB’, PN’):
        X:Y = #ANY ONE UPPER CASE VARIABLE
t1 = ['[go:VB', ' [like:IN', ' [i:PR]]', ' [to:TO]', ' [there:RB]]']
t2 = ['[A', ' [like:IN', ' [B]]', ' [to:TO]', ' [C]]']
现在

即使我将变量从(A)更改为任何一个大写字母(例如Z、H、X),我也需要它们都返回TRUE

我想用倒数第二个成员和它之前的内容只选择标签

>>> t1[0]
'[go:VB'
# to select only the tag
>>> t1[0][-2:]
'VB' # << This is what I want

>>> t1[1]
' [like:IN'
# to select only the tag
>>> t1[1][-2:]
'IN'  # << This is what I want

>>> t1[2]
' [i:PR]]'
# to select only the tag 
>>> t1[1][-2:]
']]'   # << This is NOT what I want

以下是解决格式问题的快速方法-

import itertools
t1 = '[go:VB, [like:IN, [i:PR]], [to:TO], [there:RB]]'
t2 = '[A, [like:IN, [B]], [to:TO], [C]]'
t1=t1.replace("]","")
t1=t1.replace("[","")
t2=t2.replace("[","")
t2=t2.replace("]","")
t1=t1.split(",")
t2=t2.split(",")
print(t1)
print(t2)
for i,j in itertools.zip_longest(t1,t2):
    if i[-2:]==j[-2:]:
        print("true")
    else:
        print("false")
这方面的输出是-

['go:VB', ' like:IN', ' i:PR', ' to:TO', ' there:RB']
['A', ' like:IN', ' B', ' to:TO', ' C']
false
true
false
true
false
但是,我不喜欢这种方法,我会解释原因。从您的部分代码中,我可以理解您正在使用句子和词性标记(POS)。我将通过帮助您生成一个实际可读的POS列表来解决您的问题。我在python中使用了NLTK模块,这是一个功能强大的自然语言处理工具(经过结构化数据培训)您可以找到文档

这里是输出。

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]
[('And', 'CC'), ('won', 'VBD'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('same', 'JJ')]
true
false
true
true
true
true
请密切注意输出,最后一个为真的原因是它们都是形容词。让我尽可能简单地解释代码。现在,正如您所看到的,
word\u tokenize()
是一种将句子分解为其各自标记的方法(试着用“can't”等词胡闹,看看会发生什么)和
pos\u tag()
执行词性标记。我相信您已经意识到了这一点。注意-此处,“:”默认替换为“,”。因此,更容易区分单词和标记。此模块不仅可以帮助您进行格式化,而且功能强大。您可以训练数据、提取实体并大幅提高工作质量


然而,注意到您的句子中存在变量(我想知道它们从何而来),我建议迭代列表中的每个项目并跳过变量(因为您希望它们给出真实的输出)。然后,简单地比较T1和T2之间的单词标签

这里有一个快速解决格式问题的方法-

import itertools
t1 = '[go:VB, [like:IN, [i:PR]], [to:TO], [there:RB]]'
t2 = '[A, [like:IN, [B]], [to:TO], [C]]'
t1=t1.replace("]","")
t1=t1.replace("[","")
t2=t2.replace("[","")
t2=t2.replace("]","")
t1=t1.split(",")
t2=t2.split(",")
print(t1)
print(t2)
for i,j in itertools.zip_longest(t1,t2):
    if i[-2:]==j[-2:]:
        print("true")
    else:
        print("false")
这方面的输出是-

['go:VB', ' like:IN', ' i:PR', ' to:TO', ' there:RB']
['A', ' like:IN', ' B', ' to:TO', ' C']
false
true
false
true
false
但是,我不喜欢这种方法,我会解释原因。从您的部分代码中,我可以理解您正在使用句子和词性标记(POS)。我将通过帮助您生成一个实际可读的POS列表来解决您的问题。我在python中使用了NLTK模块,这是一个功能强大的自然语言处理工具(经过结构化数据培训)您可以找到文档

这里是输出。

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]
[('And', 'CC'), ('won', 'VBD'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('same', 'JJ')]
true
false
true
true
true
true
请密切注意输出,最后一个为真的原因是它们都是形容词。让我尽可能简单地解释代码。现在,正如您所看到的,
word\u tokenize()
是一种将句子分解为其各自标记的方法(试着用“can't”等词胡闹,看看会发生什么)和
pos\u tag()
执行词性标记。我相信您已经意识到了这一点。注意-此处,“:”默认替换为“,”。因此,更容易区分单词和标记。此模块不仅可以帮助您进行格式化,而且功能强大。您可以训练数据、提取实体并大幅提高工作质量


然而,注意到您的句子中存在变量(我想知道它们从何而来),我建议迭代列表中的每个项目并跳过变量(因为您希望它们给出真实的输出)。然后,简单地比较T1和T2之间的单词标签

听起来你的输入数据的格式很烦人。您是否创建/维护了生成初始
t1
t2
的函数?如果是这样的话,在尝试此问题之前,应该先解决此问题。t2是从其他人导入的。t1几乎就是这样,但它以前有元组,我把它们去掉了。听起来你的输入数据的格式真的很烦人。您是否创建/维护了生成初始
t1
t2
的函数?如果是这样的话,在尝试此问题之前,应该先解决此问题。t2是从其他人导入的。t1几乎就是这个,但它以前有元组,我把它们去掉了。现在你已经编辑好了,看起来你只需要标记。那么最简单的方法就是取t1和t2,删除重复出现的括号。使用拆分(“,”)只会使格式设置更糟糕。因此,删除括号并执行与编辑中相同的索引搜索。这应该行得通。我做了这件事并编辑了我的答案。告诉我它是否适合你。:)所以我读了你们的其他文章,它解释了t1和t2是如何不同地获取的。我真的觉得这是你坚持NLTK的更多理由。删除元组、创建不必要的列表或获取格式错误的数据不会让您如此头疼。但是请记住,NLTK适用于结构化数据。如果您在NLTK方面遇到问题,请询问更多问题,或者尝试使用spaCy API或Alchemy API。再说一次,这些可能对你的需求来说太强大了,但它们让你省去了很多麻烦。你是对的,我在一个句子中的每个单词都使用POS。但实际上t1和t2是解析树,所以我根本无法删除“[”和“]”,所以我不想让列表变平。我非常感谢您的帮助,本次讨论非常成功