如何定义一个带字符串(句子)的函数,并在句点后面插入一个额外的空格(如果句点后面紧跟一个字母).
sent = "This is a test.Start testing!"
def normal(sent):
    list_of_words = sent.split()
    ...
这应该打印出来
"这是一个测试.开始测试!"
我想我应该用split()一个字符串制作一个列表,但接下来呢?
PS解决方案必须尽可能简单.
我想了解一些如何处理isstringstream对象的帮助.
我试图标记文件的每一行,以便在检查标记中的某些数据值后,我可以用另一种格式重写它.我在tokenVector中加载每一行并迭代向量.我的代码有效,但我关心的是我必须为每次迭代实例化一个isstringstrem对象,否则它不起作用.这感觉不对.她是我的代码:
std::string line;//each file line
std::ifstream myFile (info.txt.c_str());
if(myFile.is_open()){
     getline(myFile, line);
     std::vector<std::string> tokenVector;
    //create a isstringstream object for tokenizing each line of the file
    std::istringstream hasTokens(line);
    while(hasTokens)
    {
        std::string substring;
        if(! getline(hasTokens, substring,','))
            break;
        tokenVector.push_back(substring);
    }
    //look for some known header names for validation
    if(!tokenVector.empty()){
    if(!(tokenVector[0]=="Time")&&(tokenVector[1] == "Group")&&(tokenVector[2]=="Perception")&&(tokenVector[3] == "Sign")){
        setErrorMesssage("Invalid Header in myFile");
        return false;
        }
        tokenVector.clear();
    }
    //clear the isstringstream object
    hasTokens.str(std::string());
//if header validates, do rest of file
         while(myFile.good()){
            getline(myFile , line);
            //break line into tokens …我想计算文件中的行数,将其分成标记.我似乎无法让我的代码工作,有人可以提供建议.提前致谢
import java.util.*;
import java.io.*;
public class kup
{
    public static void main(String args[]) throws Exception
    {
        FileReader fileInput = new FileReader("C:\\save\\input.txt");
        BufferedReader readInput = new BufferedReader(fileInput);
        FileWriter fileOutput = new FileWriter("C:\\save\\output.txt");
        PrintWriter outFile = new PrintWriter(fileOutput);
        Scanner scanLine = new Scanner(readInput);
        String textInput = scanLine.nextLine();
        StringTokenizer stringtokenizer = new StringTokenizer(textInput);
        int tokenCount = stringtokenizer.countTokens();
        int lineCount = 0;
        while(scanLine.hasNextLine())
        {
            while(stringtokenizer.hasMoreTokens())
            {
                String string = stringtokenizer.nextToken();
                outFile.println(string);
            }
                lineCount++;
        }
        outFile.println("Number of words: " +tokenCount);
        outFile.println("Number of lines: " …假设我有数组,['dcab', 'feac', 'gwad', 'dnae']但想要使它们每个'a'都在它自己的标记中,例如['dc', 'a', 'b', 'fe', 'a', 'c', 'gw', 'a', 'd', 'dn', 'a', 'e'];.我该怎么办?谢谢!
我正在使用Java解析文本.我在下面定义了一个语法:
Start := "(\\<)"
Stop := "(\\>)"
Var = "(\\w*)";
Cons = "([0-9]*)";
Type1 := Start ((Var | Cons) | TypeParent) (Type1 ((Var | Cons) | TypeParent))* Stop
Type2 := Start ((Var | Cons) | TypeParent) (Type2 ((Var | Cons) | TypeParent))* Stop
TypeParent := Type1 | Type2
...
etc
我想将所有正则表达式组合成一个String模式并一次匹配.我的问题是当我开始在Type1和Type2行中使用递归语法元素时.我显然无法将递归定义提供给Java中的Pattern  - 它只是一个带有正则表达式符号的String.
我想要的是,我可以以某种方式有一个逻辑开关,如果在这个块中:
(Type2 ((Var | Cons) | TypeParent)
所有模式都匹配,除了Type2,我可以捕获所有其他组,但然后提取Type2标记应该是的字符串,然后再次递归地将它提供给regexer.最后我会得到一个基本案例:
(Var | Cons) | TypeParent)
我意识到这不是正则表达式的意思 - 现在这是一个无上下文语法(?),因为它是递归的.但是,如果不考虑超级聪明的解析器,我认为这种方法是可以破解的.
思考?
我正在寻找一种有效的方法来获取从多个字符串中提取的字符串标记列表(例如,使用空格分隔符).
例:
String s1 = "My mom cook everyday";
String s2 = "I eat everyday";
String s3 = "Am I fat?";  
LinkedList<String> tokens = new LinkedList<String>();   
//any code to efficiently get the tokens
//final result is tokens  make of a list of the following tokens:
//"My", "mom", "cook", "everyday", "I", "eat", "everyday", "Am", "I", "fat?".
现在
LinkedList是最有效的集合类(Apache Commons,Guava,他们可以帮忙吗?)!StringUtils从Apache Commons 使用,但该split方法返回一个数组!所以,我应该从一个for循环中提取由split返回的String对象数组中的字符串.这是有效的:我不知道,split创建一个阵列!Splitter从番石榴那里读到了,但这篇文章指出StringUtils在实践中更好.Scanner从Java.util …我正在使用sklearn用tf-idf Vectorizer对象进行一些NLP矢量化.可以使用关键字"token_pattern"构造此对象.
我想避免使用hashtags(#foobar),数字(以及以数字开头的字符串,即10mg),以"RT"(转发)开头的任何行,或"删除的推文"行.
另外,我想忽略unicode.
我想保留URL(不是'http://'),并将它们标记为可能存在于其中的任何单词([A-Za-z] +).
我对Regex有一些经验,但到目前为止还不需要更复杂的模式.
以下是我对所有内容的刺激......这显然不是最好的调查方式,但它总结了我目前对正则表达式规则的看法.
注意:这里的skearn doc 显示了使用字符串上的unicode标志的默认"token_pattern",我不明白为什么......也许是单独的问题.
pat2 = r"(?im)([A-Z]+)(?<!^@)([A-Z]+)(?<!^#)([A-Z]+)(?<!^(RT))([A-Z]+)(?<!^Deleted)(?<=^(http://))([A-Z]+)"
我的分解:
(?im)  #Are flags for 'multi-line' and 'case insensitive'
([A-Z]+)(?<!^@) #A negative look back, match [A-Z]+ only if not preceded by 'starts with @'.
(?<=^(http://))([A-Z]+) #A positive look forward, match [A-Z]+ only if 'starts with "http://"' is present.
我觉得这不是一个优雅的解决方案,即使它被调整为工作......
TIA
更新:原始数据示例:
如果知道有用,我正在使用pandas数据帧来加载数据.我是熊猫的新手,可能会错过一些基于熊猫的解决方案.
从这些原始数据中,我只想要从文本和URL中获取的单词.这个例子很糟糕......请进一步评论,以帮助我更好地定义...... thx!
生的:
http://foxsportswisconsin.ning.com/profiles/blogs/simvastatin-20-mg-pas-cher-sur-internet-acheter-du-simvastatin-20
符号化:
[foxsportswisconsin, ning, com, profiles, blogs, simvastatin, mg, pas, cher, sur, internet, acheter, du, simvastatin]
如何拆分给定分隔符的给定字符串.
例如:
String =>'1,2,3,4,5'Delimiter =>','
1 2 3 4 5
所以,我有一个以下列方式编写的文件:
X - Y.
A - B.
X - Z.
A - C.
X - L.
A - N.
基本上,两个实体之间存在关系.
我想将其映射到地图上,以便可以将一个唯一键映射到值列表中.
我想要的是这样的:{X = [Y,Z,L]},{A = [B,C,N]}等......
我认为存储它们的最佳方式是在Map<String, List<String>>.
我记住了以下算法:
Files.readAllLines()以将行存储为a来读取传入文件List<String>.String.split()或StringTokenizer成List<List<String>>这之后我该怎么办?我只需要一个算法,请注意,这不是家庭作业.我正在为自己编写一个简单的Java应用程序来标记这些文件,并将它们导出为CSV.
提前致谢!
sscanf 像这样工作:
int main(const int argc, const char *argv[]) {
    char buf1[1024] = {0};
    char buf2[1024] = {0};
    char buf3[1024] = {0};
    char *str = "abc, 123; xyz";
    sscanf(str, "%[^,], %[^;]; %s", buf1, buf2, buf3);
    printf("'%s' '%s' '%s'", buf1, buf2, buf3); // Prints: "'abc' '123' 'xyz'"
    return 0;
}
我想知道是否有一个函数不需要将内容复制str到buffers(buf1, buf2, buf3)中,也不需要分配任何新的内存.相反,它只是将指针(ptr1, ptr2, ptr3)设置为指向匹配的部分,str并且null终止匹配后的任何内容.
int main(const int argc, const char *argv[]) {
    char *ptr1 = NULL;
    char *ptr2 = NULL;
    char *ptr3 …