nlp python 从代码中清除文本

nlp python clean text from code

我需要从无用代码或异常中清除大量文本文件,以便进行一些文本分析,例如:

起始文本:7001

  1. 添加工作集
  2. 在该工作集中搜索内容
  3. 删除工作集
  4. 通过上下文菜单搜索

==>

日志:12 月 17 日星期一 17:23:54 GMT+01:00 2001 4 org.eclipse.ui 0 java.util.ConcurrentModificationException

java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java(Compiled
Code))
    at java.util.AbstractList$Itr.next(AbstractList.java(Compiled Code))
    at

org.eclipse.jdt.internal.ui.search.JavaSearchSubGroup.fill(JavaSearchSubGroup.java:30)
    at org.eclipse.jdt.internal.ui.search.JavaSearchGroup.fill(JavaSearchGroup.java:51)
    at org.eclipse.jdt.internal.ui.actions.ContextMenuGroup.add(ContextMenuGroup.java:25)
    at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.menuAboutToShow(PackageExplorerPart.java:498)
    at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:220)
    at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:253)
    at org.eclipse.jface.action.MenuManager.access[=11=](MenuManager.java:250)
    at org.eclipse.jface.action.MenuManager.menuShown(MenuManager.java:280)

<==

结尾文本:7001

或:

起始文本:7019

20011211 运行 下面是断点调试器下的编译单元 表明的。要让 Windows 命中断点,你必须有正确的 dl 运行 一个辅助功能客户端。如果您不能用 更简单的小例子,我可以引导您完成执行此操作的步骤。 这个 CU 唯一不同的是它包含一个非 public class 以及 public class。当我在调试器中遇到断点时,我得到了一个 对话框告诉我它找不到非 public class 的来源。这 对话框非常持久 - 我已经告诉它确定和取消,但它不断出现 背部。即使我切换到 Java 视角,我仍然会看到烦人的对话框 .如果我终止进程,对话框不会返回。但重点是 调试器应该能够看到这个 class 的源代码——这是正确的 在我的日食工作区中。它甚至没有藏在某个地方的某个罐子里——它非常 可见的。我怀疑是非 public class 的东西让 源查找。如果有帮助,我会附上对话框。这是代码:

==>

package test;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.internal.win32.*;
import org.eclipse.swt.internal.ole.win32.*;
import org.eclipse.swt.ole.win32.*;

public class AccessibilityTest {
    static Display display;
    static Shell shell;
    static FakeWidget fakeWidget;

    public static void main(String[] args) {
        display = new Display();
        shell = new Shell(display);
        shell.setLayout(new GridLayout());
        shell.setText("Accessibility Test");

        fakeWidget = new FakeWidget(shell, SWT.MULTI);
        fakeWidget.setLayoutData(new GridData(GridData.FILL_BOTH));
        shell.setSize(140, 110);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
}



private static GUID IIDFromString(String lpsz) {
    char[] buffer = (lpsz + "[=12=]").toCharArray();
    GUID lpiid = new GUID();
    if (COM.IIDFromString(buffer, lpiid) == COM.S_OK)
        return lpiid;
    return null;
}

<==

结尾文本:7019

结果必须是:

起始文本:7001

  1. 添加工作集
  2. 在该工作集中搜索内容
  3. 删除工作集
  4. 通过上下文菜单搜索

结尾文本:7001

起始文本:7019

20011211 运行 下面是断点调试器下的编译单元 表明的。要让 Windows 命中断点,你必须有正确的 dl 运行 一个辅助功能客户端。如果您不能用 更简单的小例子,我可以引导您完成执行此操作的步骤。 这个 CU 唯一不同的是它包含一个非 public class 以及 public class。当我在调试器中遇到断点时,我得到了一个 对话框告诉我它找不到非 public class 的来源。这 对话框非常持久 - 我已经告诉它确定和取消,但它不断出现 背部。即使我切换到 Java 视角,我仍然会看到烦人的对话框 .如果我终止进程,对话框不会返回。但重点是 调试器应该能够看到这个 class 的源代码——这是正确的 在我的日食工作区中。它甚至没有藏在某个地方的某个罐子里——它非常 可见的。我怀疑是非 public class 的事情让 源查找。如果有帮助,我会附上对话框。这是代码:

结尾文本:7019

在上述情况下,无用的文本位于“==>”代码“<==”之间(箭头不在文本中) ...我现在正在使用 python...但是我需要一个工具来清除代码或异常中的所有文本...它存在吗?因为我认为在这些肮脏的文本中制作 nlp 可能是无用的和错误的...

如果您正在使用 python,您可以通过阅读 ==> 和 <== 的索引来删除 ==> 代码 <== 之间的文本

示例:

str = "Hello, Welcome to ==>python<== programming"

opentag = "==>"

closetag = "<=="

Otag_index = str.find(opentag)

Ctag_index = str.find(closetag)

strToRemove = str[Otag_index+3:Ctag_index]

str = str.replace(strToRemove, '')

print(str)

这是一个 non-trivial 问题,没有针对此问题的预定义解决方案,因为它取决于您的数据。然而,存在将文本(自然语言,NL)与代码分开的不同方法,但不能保证它们在 100% 的时间都有效。

这是我的建议:

首先,您可以检查是否使用某种格式将代码与 NL 分开(如 GitHubs markdown),并编译适当的正则表达式来检测代码。我使用以下正则表达式来清理从 GitHub:

中提取的问题
leading_whitespace_pattern = re.compile(r"^( {4,}|\t( |\t)*).*?$", re.MULTILINE)
backtick_pattern = re.compile(r"```.*?```", re.DOTALL)

这里还有一些从 Redmine 中提取的问题:

code_pattern = re.compile('<pre>.*?</pre>', re.DOTALL)
at_pattern = re.compile(r"@.*?@")

如果这不适合您,事情就会变得棘手。您要么必须开发更多的正则表达式来匹配数据中可能出现的所有代码行,要么必须使用更高级的方法。巴切利等人。对该主题进行了大量研究,并使用了不同的技术并取得了良好的效果。但是,我不确定他们是否发布了他们的实现:

  1. 一个。 Bacchelli、M. D'Ambros 和 M. Lanza,“从 E-Mails 中提取源代码”,第 18 届 IEEE 程序理解国际会议 (ICPC 2010),2010 年,第 24-33 页。
  2. 一个。 Bacchelli、A. Cleve、M. Lanza 和 A. Mocci,“使用 Island Parsing 从自然语言文档中提取结构化数据”,第 26 届 IEEE/ACM 国际自动化软件工程会议 (ASE 2011),2011 年,pp. 476–479.
  3. N。 Bettenburg、B. Adams、A. E. Hassan 和 M. Smidt,“一种在非结构化数据中发现技术工件的轻量级方法”,第 19 届 IEEE 程序理解国际会议 (ICPC 2011),2011 年,第 185-188 页。

祝你好运!