-1

3天前,一个朋友给了我一个代码来保留一些句子并删除他们在记事本++中不需要的其他句子。今天我的老师告诉我,这段代码并不适用于所有句子,它会清除我们需要的大部分标签。请帮助我并更正此代码。明天展示我的 Corpus 对我来说很重要。拜托。

我想在我的文本中找到一些特殊的字符串,然后删除其他字符串。

例如在这句话中:

( (IP-MAT (CONJ vnnd)
      (NP-NOM (D das) (N wort))
      (BED war)
      (PP (P bey)
          (CODE [2])
          (NP-DAT (NPR Gott)))
      (. ,))

我想定期保留:CONJ D N BED P NPR。并删除此文本中的其他字符串。

第二个例子:

( (IP-MAT-SPE (NP-NOM-LFD (D diser) (NPR Jhesus)
 (, ,)
 (CP-REL-SPE (WNP-1 (WPRO wilcher)) (C 0)
 (IP-SUB-SPE (NP-NOM T-1) (PP (P von) (NP-DAT (PRO euch))) (BEPI ist) (RP auff) (VAN genomen) (PP (P gen) 
 (NP-ACC-XXX (NPR hymel)))))) 
 (, ,) 
 (NP-NOM-RSP (D der)) (RDPI wirt) (VB komen)
(PP (P wie) (CP-ADV-SPE (C 0) (IP-SUB-SPE (NP-NOM (PRO yhr)) (NP-ACC-2 (PRO yhn)) (VBN gesehen) (HVPI habt) 
(IP-INF-SPE (NP-ACC-SBJ ICH-2) (PP (P gen)
(NP-ACC-XXX (NPR hymel))) (VB faren)))))
 (. .)) 

我想把它们改成这样:

D NPR , WPRO C NP-NOM P PRO BEPI RP VAN P NPR , D RDPI VB , P C PRO PRO VBN HVPI NP-ACC-SBJ P NPR VB . –

该代码是:查找:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

用。。。来代替:

$1 

[美元,然后是“1”,然后是空格]

但它不适用于以下句子:

 (IP-MAT (CODE [4])
        (CONJ vnd)
      (NP-NOM *con*) 
      (RDD wurden)
      (Q alle) 
      (ADJP (ADJ voll)
        (NP-GEN (D des)
            (ADJ heyligen)
            (NPR geysts)))
      (. ,)) (ID SEPTEMBERTESTAMENT-ACTS,.45))

必须显示: CONJ NP-NOM RDD Q ADJP D ADJ D ADJ NPR 。

或不在此代码中工作:

( (IP-MAT (CODE [7])
      (NP-NOM (PRO sie))
      (VBD entsatzten)
      (NP-ACC-RFL (PRO sich))
      (ADVP (ADV aber))
      (Q alle)
      (. ,)
      (IP-MAT (NP-NOM *con*) 
          (VBD verwunderten)
          (NP-ACC-RFL (PRO sich)))
      (IP-MAT (CONJ vnnd)
          (NP-NOM *con*) 
          (VBD sprachen)
          (PP (P+D+ADJ vnternander))
          (, ,)

必须显示:NP-NOM VBD PRO ADV Q。NP-NOM VBD PRO CONJ NP-NOM VBD P+D+ADJ ,

或者关于这个例子:

 (IP-MAT-SPE (CODE [8]) 
          (CP-QUE-SPE (WADVP (WADV wie))
              (IP-SUB-SPE (VBPI horen)
                      (NP-NOM (PRO wyr)
                          (NP-NOM-PRN *ICH*-1))
                      (ADVP (ADV denn))
                      (, ,)
                      (NP-NOM-PRN-1 (D eyn) (ADJ iglicher))
                      (NP-ACC (PRO$ seyne) (N sprach)
                          (, ,)
                          (CP-REL-SPE (WPP-2 (WADV $dar) (P $ynnen))
                              (C 0) 
                              (IP-SUB-SPE (PP *T*-2)
                                      (CODE {TEXT:darynnen})
                                      (NP-NOM (PRO wyr))
                                      (VAN geporn)
                                      (BEPI sind))))))
          (. ?)) (ID SEPTEMBERTESTAMENT-ACTS,.52))

必须显示:WADV VBPI PRO NP-NOM-PRN ADV , D ADJ POR$ N , WADV PC PP PRO VAN BEPI 。

不幸的是,该代码删除了 PRO$ 或 NP-NOM 或 PP 或 Q+N 等。

对不起,我不能编辑这篇文章。我希望我的代码会出现在所有人面前。如果不是,我可以上传语料库文本文件。

4

1 回答 1

0

好吧,采用以前的正则表达式:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

您可以将字符添加到可用的字符类中,如下所示:

(?:(?!\n\n).(?<!\n\n))*?\(([\w,.-]+)\s+[\w,.-]+\)+|(?:(?!\n\n).(?<!\n\n))+$
                           ^^^^^^^     ^^^^^^^

更改第二个和/或第一个以包含更多字符,例如,使用[\w,.$-]将允许PRO$保留。只需确保在最后一个连字符之前插入额外的字符,否则正则表达式会中断。

看:

(?:(?!\n\n).(?<!\n\n))*?\(([$\w,.+-]+)\s+[$\w,.*?-]+\)+|(?:(?!\n\n).(?<!\n\n))+$

我添加了更多字符,但有些东西我认为不正常,或者你可能做了一些错别字,就像ID你在问题中没有提到的那样。

还记得我上次链接到的正则表达式演示站点吗?再次查看这些示例。你可以玩弄它;请注意,在您进行替换后,蓝色部分将被删除,而绿色部分将被保留。

于 2013-10-05T19:28:55.323 回答