как удалить только определенные строки и символы, но не японский, используя str.replace и regex - PullRequest
0 голосов
/ 27 июня 2018

У меня есть несколько аннотированных грамматических данных в общем кадре данных, которые выглядят следующим образом:

{おもしろい|ADJ}{本|N}を読んだ
このまえ{あたらしい|ADJ}{雑誌|N}を{いくつか|QUANT}買った

около 1000 из них.

Я пытаюсь убрать {}, |, и слова латинскими буквами, которые находятся между | и } (Я не хочу удалять все латинские буквы, так как у меня есть данные, которые имеют значение SF, и я хочу сохранить это

{SF|GEN}の{本|N}を読んだ

Код, который я пытаюсь реализовать:

df['text_data'].str.replace(r'\{(.+?\|[A-Za-z_]+)\}', "\1").astype(str)

и желаемый результат:

おもしろい本を読んだ
このまえあたらしい雑誌をいくつか買った
SFの本を読んだ

Это работает в Atom, если я выполняю поиск и замену, но результаты, которые я сейчас получаю, - это японские символы, которые находятся вне фигурных скобок:

を読んだ
このまえを買った
のを読んだ

Я также смотрю, могу ли я одновременно применять пробелы между} {(У меня есть некоторые правила определения и применения пробелов, которые я могу использовать, но если я могу это сделать, пока поиск / замена бывает, что было бы еще лучше)

おもしろい 本 を読んだ
このまえ あたらしい 雑誌 を いくつか 買った

1 Ответ

0 голосов
/ 27 июня 2018
import re

s = """{おもしろい|ADJ}{本|N}を読んだ
このまえ{あたらしい|ADJ}{雑誌|N}を{いくつか|QUANT}買った
{SF|GEN}の{本|N}を読んだ"""

r = (r"\{([^|]+)" +  # {left
     r"\|" +         # |
     r"[A-Z]+\}")    # right}

print(re.sub(r, r"\1", s))

Выходы:

おもしろい本を読んだ
このまえあたらしい雑誌をいくつか買った
SFの本を読んだ

Чтобы добавить интервал между "}{", просто запустите его на s перед запуском регулярного выражения:

s = s.replace("}{", "} {")

Выходы:

おもしろい 本を読んだ
このまえあたらしい 雑誌をいくつか買った
SFの本を読んだ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...