首页 / PYTHON / python-查找已连接的令牌
python-查找已连接的令牌
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-查找已连接的令牌,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2135字,纯文字阅读大概需要4分钟。
内容图文
![python-查找已连接的令牌](/upload/InfoBanner/zyjiaocheng/664/6e3955c73d3a47509595af47bf4008e1.jpg)
我编写了将文本标记作为输入的代码:
tokens = ["Tap-", "Berlin", "Was-ISt", "das", "-ist", "cool", "oh", "Man", "-Hum", "-Zuh-UH-", "glit"]
该代码应找到所有包含连字符或使用连字符相互连接的令牌:基本上,输出应为:
[["Tap-", "Berlin"], ["Was-ISt"], ["das", "-ist"], ["Man", "-Hum", "-Zuh-UH-", "glit"]]
我写了一个代码,但是我不知怎么用链接连接的hypens代替了:要尝试:http://goo.gl/iqov0q
def find_hyphens(self):
tokens_with_hypens =[]
for i in range(len(self.tokens)):
hyp_leng = 0
while self.hypen_between_two_tokens(i + hyp_leng):
hyp_leng += 1
if self.has_hypen_in_middle(i) or hyp_leng > 0:
if hyp_leng == 0:
tokens_with_hypens.append(self.tokens[i:i + 1])
else:
tokens_with_hypens.append(self.tokens[i:i + hyp_leng])
i += hyp_leng - 1
return tokens_with_hypens
我怎么了有更高效的解决方案吗?谢谢
解决方法:
我在您的代码中发现了3个错误:
1)您在这里比较tok1的最后2个字符,而不是tok1的最后一个和tok2的第一个:
if "-" in joined[len(tok1) - 2: len(tok1)]:
# instead, do this:
if "-" in joined[len(tok1) - 1: len(tok1) + 1]:
2)您在这里省略了最后一个匹配的令牌.在此处将切片的结束索引增加1:
tokens_with_hypens.append(self.tokens[i:i + hyp_leng])
# instead, do this:
tokens_with_hypens.append(self.tokens[i:i + 1 + hyp_leng])
3)您无法在python的范围循环中操纵for for i的索引.下一次迭代将只检索下一个索引,覆盖您的更改.相反,您可以使用while循环,如下所示:
i = 0
while i < len(self.tokens):
[...]
i += 1
这3个更正导致您的测试通过:http://goo.gl/fd07oL
尽管如此,我还是忍不住要从头开始编写算法,尽可能简单地解决您的问题:
def get_hyphen_groups(tokens):
i_start, i_end = 0, 1
while i_start < len(tokens):
while (i_end < len(tokens) and
(tokens[i_end].startswith("-") ^ tokens[i_end - 1].endswith("-"))):
i_end += 1
yield tokens[i_start:i_end]
i_start, i_end = i_end, i_end + 1
tokens = ["Tap-", "Berlin", "Was-ISt", "das", "-ist", "cool", "oh", "Man", "-Hum", "-Zuh-UH-", "glit"]
for group in get_hyphen_groups(tokens):
print ("".join(group))
要排除1-element-groups(如您的预期结果),请在以下情况下将收益包装到其中
if i_end - i_start > 1:
yield tokens[i_start:i_end]
要包括已经包含连字符的1-element-group,请将其更改为例如:
if i_end - i_start > 1 or "-" in tokens[i_start]:
yield tokens[i_start:i_end]
内容总结
以上是互联网集市为您收集整理的python-查找已连接的令牌全部内容,希望文章能够帮你解决python-查找已连接的令牌所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。