在处理过程中阅读python - java

有谁知道如何在不使用processing.py或其他第三方库或平台的情况下读取python文件?我有一个可以生成文本的python文件,并希望我的处理实时读取它。但是似乎“ loadStrings”东西出了问题,因为我的三行文本不是同时生成的,所以我的第三行总是显示得比前两行慢一些,因此处理草图将其弄乱了在某一点。该如何处理?

String[] lines;
PFont font;

void setup() {
  size(800, 600);
  font = createFont("Arial", 16);
  frameRate(2);
  //lines = loadStrings("output.txt");
}

void draw() {
  background(255);
  textFont(font);
  fill(0);
  lines = loadStrings("output.txt");
  for (int i = 0; i < 3; i++) {

    String word = lines[i];

    text(word, random(width), random(height));
  }
 // noLoop();
}

我的python草图:

class MarkovGenerator(object):

  def __init__(self, n, max):
    self.n = n # order (length) of ngrams
    self.max = max # maximum number of elements to generate
    self.ngrams = dict() # ngrams as keys; next elements as values
    beginning = tuple(["China", "is"]) # beginning ngram of every line
    beginning2 = tuple(["But", "it"])
    self.beginnings = list()
    self.beginnings.append(beginning)
    self.beginnings.append(beginning2)



  def tokenize(self, text):
    return text.split(" ")

  def feed(self, text):

    tokens = self.tokenize(text)

    # discard this line if it's too short
    if len(tokens) < self.n:
      return

    # store the first ngram of this line
    #beginning = tuple(tokens[:self.n])
    #self.beginnings.append(beginning)

    for i in range(len(tokens) - self.n):

      gram = tuple(tokens[i:i+self.n])
      next = tokens[i+self.n] # get the element after the gram

      # if we've already seen this ngram, append; otherwise, set the
      # value for this key as a new list
      if gram in self.ngrams:
        self.ngrams[gram].append(next)
      else:
        self.ngrams[gram] = [next]

  # called from generate() to join together generated elements
  def concatenate(self, source):

      haha = list()
      kk = list()

      haha = " ".join(source)
      ouou = haha.split(".")
      kk = ouou[0]

      return kk
    # return " ".join(source)

  # generate a text from the information in self.ngrams
  def generate(self,i):

    from random import choice

    # get a random line beginning; convert to a list. 
      #current = choice(self.beginnings)
    current = self.beginnings[i]
    output = list(current)

    for i in range(self.max):
      if current in self.ngrams:
        possible_next = self.ngrams[current]
        next = choice(possible_next)
        output.append(next)
        # get the last N entries of the output; we'll use this to look up
        # an ngram in the next iteration of the loop
        current = tuple(output[-self.n:])
      else:
        break

    output_str = self.concatenate(output)
    return output_str


  def search_facebook_posts(self):
      import json
      import urllib
      import time
      FB = list()
      query = {'q': "feel", 'limit': 200}
      resp = urllib.urlopen('http://graph.facebook.com/search?' + urllib.urlencode(query))
      data = json.loads(resp.read())
      posts = list()
      for item in data['data']:
          if 'message' in item:
              posts.append(item)


      for post in posts:
          FB.append(post['message'].encode('ascii', 'replace'))

      return FB

  def together(self):
      import re
      sentences = list()
      manysentences = list()
      togetherlist = self.search_facebook_posts()
      for line in togetherlist:
          line = line.replace(".", "\n")
          line = line.replace(",", "\n")
          line = line.replace("?", "\n")
          line = line.replace(";", "\n")
          line = line.replace("!", "\n")
          line = line.replace("...", "\n")
          line = line.replace(":", "\n")
          sentenca = line.split("\n")
          for i in range(len(sentenca)):
            sentences.append(sentenca[i])

      for sentence in sentences:
          if "feel" in sentence:
              for matching in re.findall(r'\b[Ff]eel(.*)$',sentence):
                manysentences.append(matching)

      sentencesnew = random.choice(manysentences)
      haha = "I feel" + sentencesnew
      return haha


  def namelist(self):
      import random 
      namelisty = list()
      for line in open("namelist"):
          namelisty.append(line+"said")

      thisname = random.choice(namelisty)

      return thisname 


if __name__ == '__main__':

  import sys
  import random
  import codecs


  generator = MarkovGenerator(n=2, max=16)
  for line in open("china"):
    line = line.strip()
    generator.feed(line) 


  print generator.together()+"."

参考方案

您可以使用Java的Runtime和Process类:

  import java.io.*;

  void setup() {
    try {
      Process p = Runtime.getRuntime().exec("python /path/to/your/script.py arguments");

      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

      String line=null;

      while((line=input.readLine()) != null) {
          System.out.println(line);
      }

      int exitWith = p.waitFor();
      System.out.println("Exited with error code "+exitWith);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

因此,例如最小的ten.py:

import sys

if len(sys.argv) > 0:
    print sys.argv[1] * 10

我会看到一条消息打印了10次:

  import java.io.*;

  void setup() {
    try {
      Process p = Runtime.getRuntime().exec("python /Users/hm/Documents/Processing/tests/CMD/ten.py hello");

      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

      String line=null;

      while((line=input.readLine()) != null) {
          System.out.println(line);
      }

      int exitWith = p.waitFor();
      System.out.println("Exited with error code "+exitWith);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

无法将消息从python服务器发送到Java客户端 - java

我尝试通过本地网络在Raspberry Pi(Python中的服务器)和Java客户端之间创建客户端/服务器应用程序。我不知道如何将消息从Python服务器发送到Java客户端。我总是遇到错误:[Errno 32]管道损坏。我看不到我错了。这里的服务器代码:class ServerLED(): ''' classdocs �…

将列表的python排序转换为Java代码。 - java

我正在尝试将将items列表排序为Java代码的python代码进行转换。如何在Java中进行这种排序?python code:import re items = ['10H', '10S', '2H', '3S', '4S', '6C',…