Python 给定单词模式及其偏移量,找出其在句子中的位置/顺序

Python 给定单词模式及其偏移量,找出其在句子中的位置/顺序,python,regex,Python,Regex,我有一张这样的目录: {'content': '@aaaaaaaaaaa People are going to find it hard to believe that Miliband makes it up as he goes along more than Osborne.', 'entities': [{'named_entity': 'miliband', 'offset': 62}]} 因此,我在内容(我使用re.compile(r'\b({0})\b')进行匹配)中有与“m

我有一张这样的目录:

{'content': '@aaaaaaaaaaa People are going to find it hard to believe that Miliband makes it up as he goes along more than Osborne.',
 'entities': [{'named_entity': 'miliband', 'offset': 62}]}
因此,我在内容(我使用
re.compile(r'\b({0})\b')
进行匹配)中有与“miliband.”匹配的“miliband”(即第一个miliband)等实体,以及其起始字母的偏移量。我想找出“Miliband”在句子中的位置,即“Miliband.”是句子中的第11个单词

不管怎样,我能做到吗??我想我必须首先标记这个句子,但是我如何利用偏移量来识别正确的匹配词,从而确定它在标记化列表中的位置

谢谢

更新:
关于实体词前面的特殊字符/标点符号。e、 例如,“#米利班德”和
s=“你好,世界#米利班德”;pos=13;pos_word=len(s[:62].split())=3,由于“#”,它应该是2(从0开始)。程序是否有任何方法使用该偏移量(即13)并识别该字符是否在第三个标记化单词“#miliband”的偏移量范围内,因此=2?

您就快到了,请使用您已经找到的位置(62)。这就是你的位置,你所需要做的就是把代币数到你匹配的单词

s="People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.',"

pos = 62

pos_word = len(s[:62].split())

print pos_word

这等于11。和往常一样,你可能需要-1或+1来获得准确的数字,但这应该是可行的。

你就快到了,使用你已经找到的位置(62)。这就是你的位置,你所需要做的就是把代币数到你匹配的单词

s="People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.',"

pos = 62

pos_word = len(s[:62].split())

print pos_word

这等于11。和往常一样,你可能需要-1或+1来获得准确的数字,但这应该是可行的。

你就快到了,使用你已经找到的位置(62)。这就是你的位置,你所需要做的就是把代币数到你匹配的单词

s="People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.',"

pos = 62

pos_word = len(s[:62].split())

print pos_word

这等于11。和往常一样,你可能需要-1或+1来获得准确的数字,但这应该是可行的。

你就快到了,使用你已经找到的位置(62)。这就是你的位置,你所需要做的就是把代币数到你匹配的单词

s="People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.',"

pos = 62

pos_word = len(s[:62].split())

print pos_word

这等于11。和往常一样,你可能需要-1或+1才能把数字弄清楚,但这应该行得通。

从你的问题来看,我不确定你想达到什么目的。不过,希望这会有所帮助。首先需要拆分句子,然后使用索引查找列表中第一个出现的单词

d = {'content': 'People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.', 'entities': [{'named_entity': 'miliband', 'offset': 62}]}

>>> d['content'].split().index('Miliband')
10
请注意,偏移量62表示第二个毫米波段

>>> d['content'][:62]
'People are going to find it hard to believe Miliband. Miliband'
使用字典的偏移量:

>>> len(d['content'][0:d['entities'][0]['offset']].split())
11

从你的问题来看,我不确定你想要实现什么。不过,希望这会有所帮助。首先需要拆分句子,然后使用索引查找列表中第一个出现的单词

d = {'content': 'People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.', 'entities': [{'named_entity': 'miliband', 'offset': 62}]}

>>> d['content'].split().index('Miliband')
10
请注意,偏移量62表示第二个毫米波段

>>> d['content'][:62]
'People are going to find it hard to believe Miliband. Miliband'
使用字典的偏移量:

>>> len(d['content'][0:d['entities'][0]['offset']].split())
11

从你的问题来看,我不确定你想要实现什么。不过,希望这会有所帮助。首先需要拆分句子,然后使用索引查找列表中第一个出现的单词

d = {'content': 'People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.', 'entities': [{'named_entity': 'miliband', 'offset': 62}]}

>>> d['content'].split().index('Miliband')
10
请注意,偏移量62表示第二个毫米波段

>>> d['content'][:62]
'People are going to find it hard to believe Miliband. Miliband'
使用字典的偏移量:

>>> len(d['content'][0:d['entities'][0]['offset']].split())
11

从你的问题来看,我不确定你想要实现什么。不过,希望这会有所帮助。首先需要拆分句子,然后使用索引查找列表中第一个出现的单词

d = {'content': 'People are going to find it hard to believe Miliband. Miliband makes it up as he goes along more than Osborne.', 'entities': [{'named_entity': 'miliband', 'offset': 62}]}

>>> d['content'].split().index('Miliband')
10
请注意,偏移量62表示第二个毫米波段

>>> d['content'][:62]
'People are going to find it hard to believe Miliband. Miliband'
使用字典的偏移量:

>>> len(d['content'][0:d['entities'][0]['offset']].split())
11

你的预期产量是多少?为什么希望正则表达式与第一个匹配?我的expect输出只是匹配字的位置,在“Miliband”的情况下,->11。因为我想匹配那些在“miliband”之前或之后有特殊字符/标点的字符,因为我看到你有两个不同的问题。一个是与您正在搜索的内容相匹配的适当regexp“毫频带”,“毫频带”。幼稚地,我会考虑任何非字母数字字符作为你的词的边界。不仅仅是\bxxx\b。第二个是分割计数,以找到您的单词位置。我不认为这些是独立的关注点,我也不认为前面的正则表达式,尽管它们很棘手。你的单词边界模式可能会进入我的天真分裂。正则表达式允许多个拆分,请使用它们。如果您认为空格和#是单词拆分,那么它们在您的初始正则表达式中属于这样的类型,即找到62(这是错误的答案),然后是找到单词位置的第二个正则表达式。看看你是否想把一个正则表达式循环到另一个正则表达式,这让我觉得正则表达式包甚至可能包含完整的答案。i、 e.按您的搜索模式分割,毫带+边界限定符\b'#。然后按边界限定符\b#拆分以查找单词pos。这些都是相关的问题,使用单元测试来梳理代码。正则表达式的功能非常强大。如果代码很复杂,我觉得自己很笨=>退出unittest。您期望的输出是什么?为什么希望正则表达式与第一个匹配?我的expect输出只是匹配字的位置,在“Miliband”的情况下,->11。因为我想匹配那些在“miliband”之前或之后有特殊字符/标点的字符,因为我看到你有两个不同的问题。一个是与您正在搜索的内容相匹配的适当regexp“毫频带”,“毫频带”。幼稚地,我会考虑任何非字母数字字符作为你的词的边界。不仅仅是\bxxx\b。第二个是分割计数,以找到您的单词位置。我不认为这些是独立的关注点,我也不认为前面的正则表达式,尽管它们很棘手。你的单词边界模式可能会进入我的天真分裂。正则表达式允许多个拆分,请使用它们。如果您认为空格和#是单词拆分,那么它们在您的初始正则表达式中属于这样的类型,即找到62(这是错误的答案),然后是找到单词位置的第二个正则表达式。