【问题标题】:Regex , Find the sentence, all of which are capital lettersRegex , 找到句子,都是大写字母
【发布时间】:2020-06-23 06:18:15
【问题描述】:

我需要你的帮助。

目前我正在使用此代码部分进行工作;

    altbaslik = []
    for line in sentenceIndex:
        finded = re.match(r"\w*[A-Z]\w*[A-Z]\w*|[Ö|Ç|Ş|Ü|Ğ|İ]", line)
        if finded != None:
          finded2 = finded.group()
          altbaslik.append(finded2)


    print(altbaslik)

sentenceIndex = 这是一个列表。它包含段落中的标记化句子。例如:


示例段落:

VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, Cumhurbaşkanı Erdoğan ve Başbakan Davutoğlu'nun ittifakıyla seçildi。 O süreci ayrıntılı olarak aktaracağım。 Hatta Cumhurbaşkanı ve Başbakan'ı aynı isim üzerinde ittifak etmeye götüren kriterlere değineceğim。 Ama bir şey var ki aktarmasam olmaz。 Merkez Bankası Başkanı'nın kaderi Dolmabahçe ile Vodafone Arena arasındaki yolculukta belirleniyor。



句子索引:

['VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, Cumhurbaşkanı Erdoğan ve Başbakan Davutoğlu'nun ittifakıyla seçildi.','.......', '........']


我需要一个正则表达式,它可以找到句子中所有大写字母的单词。

“VODOFONE ARENA ŞANSI”需要找到并提取此部分。我正在使用的当前正则表达式不起作用。我需要关于这个正则表达式的帮助。

注意: [Ö|Ç|Ş|Ü|Ğ|İ] 我正在研究土耳其语文本。所以我也需要注意这封信。

感谢那些愿意抽出时间并在这个问题上帮助我的人:)

【问题讨论】:

  • sentenceIndex [ "第一句话。" “第二句”“.....”] 我正在为此使用 nltk 标记器,我认为它只有在句子末尾有一个点(。)时才会分裂。 for line in sentenceIndex: line : "VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, Cumhurbaşkanı Erdoğan ve Başbakan Davutoglu'nun ittifakıyla seçildi。"
  • 试试print (re.findall(r'\b[A-ZÖÇŞÜĞİ]+(?:\W+[A-ZÖÇŞÜĞİ]+)*\b', line)),见this Python regex demo
  • 试过Truecasing?也许是这样:github.com/alvations/sacremoses#usage-cli(无耻的插头)

标签: python regex nltk text-extraction stringtokenizer


【解决方案1】:

为避免列出所有大写字符的变体,请安装并使用新的regex 模块。它与(迄今为止)默认的re 极为相似,但具有更高的Unicode properties support

例如,要查找任何大写字符,您可以使用 Unicode 属性\p{Lu}

import regex

text = 'VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, ' \
       'ΘΑΥΜΑΣΙΟΣ Cumhurbaşkanı Erdoğan ve Başbakan Davutoğlu’nun ittifakıyla seçildi.'

found = regex.findall(r'\b\p{Lu}+(?: \p{Lu}+)*\b', text)
print (found)  # => ['VODOFONE ARENA ŞANSI', 'ΘΑΥΜΑΣΙΟΣ']

【讨论】:

  • 你所说的这个新的正则表达式模块也非常适合土耳其语谢谢你帮助我
【解决方案2】:

您可以使用re.findall

r'\b[A-ZÖÇŞÜĞİ]+(?:\W+[A-ZÖÇŞÜĞİ]+)*\b'

使用 Python regex 库,您可以使用 pip install regex 安装:

r'\b\p{Lu}+(?:\W+\p{Lu}+)*\b'

请参阅regex demo

详情

  • \b - 单词边界
  • [A-ZÖÇŞÜĞİ]+ - 1+ 个大写字母(基本拉丁语和土耳其语)(\p{Lu} 匹配任何 Unicode 大写字母)
  • (?:\W+[A-ZÖÇŞÜĞİ]+)* - 0 次或多次重复
    • \W+ - 任何 1+ 个非单词字符
    • [A-ZÖÇŞÜĞİ]+ - 1+ 个大写字母(基本拉丁语和土耳其语)(\p{Lu} 匹配任何 Unicode 大写字母)
  • \b - 单词边界

Python demo

import re

altbaslik=[]
sentenceIndex = ['VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, Cumhurbaşkanı Erdoğan ve Başbakan Davutoğlu’nun ittifakıyla seçildi.','...................','.................']
for line in sentenceIndex:
    found = re.findall(r"\b[A-ZÖÇŞÜĞİ]+(?:\W+[A-ZÖÇŞÜĞİ]+)*\b", line)
    if len(found):
        altbaslik.extend(found)

print(altbaslik) # => ['VODOFONE ARENA ŞANSI']

或者,使用 PyPi regex:

import regex

altbaslik=[]
sentenceIndex = ['VODOFONE ARENA ŞANSI Ama asıl önemli olan nokta Murat Çetinkaya, Cumhurbaşkanı Erdoğan ve Başbakan Davutoğlu’nun ittifakıyla seçildi.','...................','.................']
for line in sentenceIndex:
    found = regex.findall(r'\b\p{Lu}+(?:\W+\p{Lu}+)*\b', line)
    if len(found):
        altbaslik.extend(found)

print(altbaslik) # => ['VODOFONE ARENA ŞANSI']

【讨论】:

  • @BraunGHt 如果您可以安装 PyPi 正则表达式,我使用我的方法添加了 PyPi 正则表达式解决方案。
猜你喜欢
  • 2021-07-23
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2022-01-23
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多